\\fmmain.h
namespace Ui {
class fmMain;
}
class fmMain : public QDialog
{
Q_OBJECT
public:
explicit fmMain(QWidget *parent = 0);
~fmMain();
int setDB(QSqlDatabase *db);
protected:
void changeEvent(QEvent *e);
private:
Ui::fmMain *ui;
dmModule dm;
};
\\fmmain.cpp
fmMain::fmMain(QWidget *parent) :
QDialog(parent),
ui(new Ui::fmMain)
{
ui->setupUi(this);//создание и инициализация компонентов интерфейса
}
fmMain::~fmMain()
{
delete ui;
}
QT\QTableWidget несколько вопросов
Есть необходимость создать табличку QTableWidget, где будет отображаться информация о процессах(id,pid,имя.,etc). Никак не могу вкурить, как правильно ее делать. Сама таблица будет на QTabWidget. Вот вопросы, которые я не разрешил:
1)Где должен создавать экземпляр класса.
2)Как он должен создаваться.
3)Если я создам на QTabWinget рядом с таблицей таймер, по интервалу которого будет вызываться метод класса process, который получит обнавленную информацию о процессах, как сделать, чтобы можно было изменять значения таблицы из методов таймера или метода класса process.
4)Как сделать глобальную переменную для экземпляра класса process, чтобы можно было к ней обращаться из любого модуля?
Читал книги по Qt, да и Qt Demo смотрел, но так как-то все очень жу сложно задуманно, с большим количеством компонентов, чем хотелось бы, какие-то модели и фильтры непонятные.
Код:
соотвественно доступ к компонентам :
Код:
ui->tvList->setEnabled(true);
если надо организовать доступ к компоненту извне класса - то я в таком случае создаю открытые методы доступа либо просто открытый указатель на нужный мне компонент.
Но есть и другие способы. Просто этот я используя сам и требую от своих.
2. Как удобно. Либо в дизигненре либо программно. Проще всего создавать в дизайнере форм - экономит достаточно много времени. Как инициализируется - показал выше.
3. Для QTableWidget данные можно менять непосредственно в записях таблицы - используя методы setItem, например так можно установить значения в таблице используя запрос:
Код:
int dmModule::loadTableDocItem(QWidget *sender, const int &mid, double &summ){
QTableWidget *tb = (QTableWidget*)sender; //получаем указатель на таблицу
QStringList li;
tb->clear();
tb->setRowCount(0);
tb->setColumnCount(0);
//формируем список заголовков
QString heder = "Код";
li << heder;
heder = "Наименование";
li << heder;
heder = "Smid";
li << heder;
heder = "Ед.изм";
li << heder;
heder = "Кол-во";
li << heder;
heder = "Цена";
li << heder;
heder = "Розница";
li << heder;
heder = "Сумма";
li << heder;
heder = "did";
li << heder;
int count = li.count();
tb->setColumnCount(count);
//установили заголовки
tb->setHorizontalHeaderLabels(li);
//скрыли ненужные поля
tb->setColumnHidden(2,true);
tb->setColumnHidden(8,true);
tb->setColumnWidth(0,60);
//сделали запрос
QSqlQuery query(dmBaseModule::db);
QString query_str = "select did, gid,smid,gname,smname_short,gcount, gprice, gsumm, price from loaddocumentitems(?,?)";
query.prepare(query_str);
query.addBindValue(mid);
query.addBindValue(wid);
query.setForwardOnly(true);
query.exec();
summ = 0.0;
//получаем данные
while(query.next()){
//вставили новую запись
tb->insertRow(tb->rowCount());
//сделали активной
tb->setCurrentCell(tb->rowCount()-1,0);
//пошли записывать
tb->setItem(tb->currentRow(),0,new QTableWidgetItem(query.record().value("gid").toString()));
tb->setItem(tb->currentRow(),1,new QTableWidgetItem(query.record().value("gname").toString()));
tb->setItem(tb->currentRow(),2,new QTableWidgetItem(query.record().value("smid").toString()));
tb->setItem(tb->currentRow(),3,new QTableWidgetItem(query.record().value("smname_short").toString()));
tb->setItem(tb->currentRow(),4,new QTableWidgetItem(query.record().value("gcount").toString()));
tb->setItem(tb->currentRow(),5,new QTableWidgetItem(query.record().value("gprice").toString()));
tb->setItem(tb->currentRow(),6,new QTableWidgetItem(query.record().value("price").toString()));
summ += query.record().value("gsumm").toDouble();
QString textF = QString("%1").arg(query.record().value("gsumm").toDouble(),0,'f',2);
tb->setItem(tb->currentRow(),7,new QTableWidgetItem(textF));
tb->setItem(tb->currentRow(),8,new QTableWidgetItem(query.record().value("did").toString()));
}
return 0;
}
QTableWidget *tb = (QTableWidget*)sender; //получаем указатель на таблицу
QStringList li;
tb->clear();
tb->setRowCount(0);
tb->setColumnCount(0);
//формируем список заголовков
QString heder = "Код";
li << heder;
heder = "Наименование";
li << heder;
heder = "Smid";
li << heder;
heder = "Ед.изм";
li << heder;
heder = "Кол-во";
li << heder;
heder = "Цена";
li << heder;
heder = "Розница";
li << heder;
heder = "Сумма";
li << heder;
heder = "did";
li << heder;
int count = li.count();
tb->setColumnCount(count);
//установили заголовки
tb->setHorizontalHeaderLabels(li);
//скрыли ненужные поля
tb->setColumnHidden(2,true);
tb->setColumnHidden(8,true);
tb->setColumnWidth(0,60);
//сделали запрос
QSqlQuery query(dmBaseModule::db);
QString query_str = "select did, gid,smid,gname,smname_short,gcount, gprice, gsumm, price from loaddocumentitems(?,?)";
query.prepare(query_str);
query.addBindValue(mid);
query.addBindValue(wid);
query.setForwardOnly(true);
query.exec();
summ = 0.0;
//получаем данные
while(query.next()){
//вставили новую запись
tb->insertRow(tb->rowCount());
//сделали активной
tb->setCurrentCell(tb->rowCount()-1,0);
//пошли записывать
tb->setItem(tb->currentRow(),0,new QTableWidgetItem(query.record().value("gid").toString()));
tb->setItem(tb->currentRow(),1,new QTableWidgetItem(query.record().value("gname").toString()));
tb->setItem(tb->currentRow(),2,new QTableWidgetItem(query.record().value("smid").toString()));
tb->setItem(tb->currentRow(),3,new QTableWidgetItem(query.record().value("smname_short").toString()));
tb->setItem(tb->currentRow(),4,new QTableWidgetItem(query.record().value("gcount").toString()));
tb->setItem(tb->currentRow(),5,new QTableWidgetItem(query.record().value("gprice").toString()));
tb->setItem(tb->currentRow(),6,new QTableWidgetItem(query.record().value("price").toString()));
summ += query.record().value("gsumm").toDouble();
QString textF = QString("%1").arg(query.record().value("gsumm").toDouble(),0,'f',2);
tb->setItem(tb->currentRow(),7,new QTableWidgetItem(textF));
tb->setItem(tb->currentRow(),8,new QTableWidgetItem(query.record().value("did").toString()));
}
return 0;
}
пример вызова функции из формы:
Код:
dm.loadTableDocItem(ui->twMain,doc->getDocId(),summ);
4. Объявить класс и включать заголовочный модуль там где необходимо.
Благодарю. Во всем разобрался.