学习Qt时遇到的问题,找到的解决方案。
:不保证说的一定对!
:不定期更新。
---------------------------------
Q:
QVariant 保存指针数据
A1:
1,使用QVariant::fromValue((void*)target)保存数据
2,使用(ShortcutItem*)(v.value<void*>()) 提取数据
A2:
1,使用Q_DECLARE_METATYPE(ShortcutItem*) 声明metatype。
2,QVariant::fromValue(target) 保存数据
3,直接使用 (v.value<ShortcutItem*>())提取数据,不必强制类型转换
Q :
QTreeView 自动调整列宽
A:
header()->setResizeMode(QHeaderView::ResizeToContents );
在设置完QTreeView的model后再调用setColumnWidth()设置列的宽度才有效!
Q:
无法解析的外部符号 "public: virtual struct QMetaObject
public: virtual int __thiscall TestPane1::qt_metacall
A:
主要是因为没有生成 moc_xxx.cpp 文件。
另外注意:
如果类被置于 #ifdef _DEBUG /#endif 这样的宏中,即便是在debug模式下,也不会生成moc_xx.cpp 文件。
Q:
QObject::connect: Cannot queue arguments of type 'QMap<QString,QString>',(Make sure 'QMap<QString,QString>' is registered using qRegisterMetaType().).
A:
上述错误,只有在跨线程信号传递时才会出现. 因为QMap是QT可识别的基本类型,不需要再注册元对象系统中,在同一个线程中运行没有问题.
// QObject: Cannot create children for a parent that is in a different thread.
// (Parent is KMsgCenter(0xf71030), parent's thread is QThread(0xde7668), current thread is KMsgCenter(0xf71030)
qRegisterMetaType< TicketList>("TicketList" );
Q:
QDockWidget的派生类重载了closeEvent,但是在应用程序退出的是没有得到调用。
A:
查Qt手册,This event handler is called with the given event when Qt receives a window close request for a top-level widget from the window system.
即:在应用程序退出的时候,只有顶层窗口才会得到这个事件通知,其他窗口不会得到close通知。即便QDockWidget在浮动状态下(这时候是顶层窗口)。
依然不会得到关闭通知。
可以通过宿主窗口(QMainWindow)的closeEvent中手动调用 dock->close(),来使其得到通知。
注意:QDockWidget本身重载了closeEvent,派生类处理完成后,要调用下基类的closeEvent。
Q:
QDockWidget 不能调整大小:
A:
QDockWidget的大小是根据其承载的widget的大小策略进行调整的。如果其承载的widget是fixedsize,那么这个dockwidget也就不能被调整大小了。
所以,如果想调整大小,应该设置承载widget的sizepolicy
Q:
A:
QSqlTableModel 创建的时候应该指定一个QSqlDatabase对象,如果不指定的话,将会自动使用当前默认的那个数据库连接。
QSqlTableModel 的SetHeaderData应该在SetTable之后使用,否则会不起作用。
Q:
禁止调整窗口大小
A:
貌似在Designer里面设置SizePolicy为fixed/fixed并不起作用。在设计器中设计好窗口大小,在窗口的构造函数里使用SetFixedSize(size()); 即可
Q:
找不到入口点函数
A:
本地代码写main()... ,并连接qtmain.lib
使用数据库关系模型QSqlRelationalTableModel数的时候,必须先调用select然后再调用setRelation(...),否则数据库中的数据将不能显示
Q:
_ITERATOR_DEBUG_LEVEL 不匹配
A:
通常是因为debug使用了release的lib,或者相反。
Q:
通过vs addin 转换qt pro,加载工程不成功,提示:不支持的路径格式。
A:
仔细看提示信息,所显示的路径类似: C:\xx\debug\C:\xx\ 。手动编辑vcxproject 文件,找到此路径,去掉后半部分 c:\xx 即可
Q:
在QVBoxLayout使用addWidget添加了两个QPushButton,希望第一个固定高度,第二个高度随时改变。
addWidget(btn1, 0)
addWidget(btn2, 1);
无效。两个的高度都不会改变
设置btn2.setMiniumSize() 无效。。。
A:
因为QPushButton的SizePolicy问题。设置btn2的SizePolicy::Expanding 就ok了。
Q:
屏幕可用工作区大小
A:
setGeometry( QApplication ::desktop ()-> availableGeometry());