QWidget,顾名思义,就是窗体部件的基类,比如QDialog、QLabel等都直接或间接继承自它。它提供了一些窗体部件专有的信号与槽。QtWidget自然也继承自QObject。
一般上,在使用Qt
Creator创建一个类时,Qt会询问你该类的基类是什么、类型信息是什么等。如果你的类是继承自形如QPushButton、QDialog、
QMainWindow、QLabel的,那么,使用explicit MyLabel(QWidget *parent =
0)。如果你的类继承自QString等类,那么使用explicit MyString(QObject*parent = 0)。
这里的QObject *parent也好,QWidget *parent也好,都是为了给对象指定从属关系。比如,
explicit MyLabel(QWidget *parent = 0)
这样:
QDialog dialog
MyLabel *label = new MyLabel(&dialog)
就指定了label是作为dialog的一个child存在的。当dialog被销毁时,它的所有children都会被自动销毁。所以在Qt中,只要我们在动态创建对象时显式或隐式(比如通过Layout、setCentralWidget等)指定了对象的从属关系,那么这个对象就会在其父对象销毁的时刻被Qt自动销毁,而无需你自己再调用delete了。
两种方法:1.在QSplitter创建实例的时候,构造函数传递主窗口的参数。2.使用QLayout子类管理窗口
1例:QSplitter *mysp = new QSplitter(this)//this指针是主窗口
2例:QGridLayout *mainly = new QGridLayout//也可以使用水平对齐或垂直对齐
mainly->add(mysp,0,0)
this->setLayout(mysp)
在QT的widget中用tableview显示sqlite数据库表中的内容。假设有数据库文件test.db,有表table(id integer, name nvarchar(20),age integer),且有数条数据。
首先用QTcreator创建一个基于Widget类的窗口,再拖一个tableview到widget中,保存,然后按照如下方法进行:
1.在widget.h中增添头文件:QtSql/qsql.h、QtSql/QsqlDatabase、QtSql/QsqlQuery、QtSql/QsqlQueryModel
2.在.pro工程文件中添加:QT+=sql
3.在widget.cpp中widget的构造函数中添加如下代码:
QsqDatabase db = QsqlDatabase::addDatabase("QSQLITE")
db.setDatabaseName("test.db")
if(!db.open())
{
//错误处理
}
static QSqlQueryModel *model = new QSqlQueryModel(ui->tableview)
model->setQuery(QString("select * from table"))
model->setHeaderData(0,Qt::Horizontal,QObject::tr("编号"))
model->setHeaderData(1,Qt::Horizontal,QObject::tr("姓名"))
model->setHeaderData(2,Qt::Horizontal,QObject::tr("年龄"))
ui->tableview->setModel(model)
db->close()
这样之后,table表里的内容就会显示到tableview中了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)