Qt知识点、疑难杂症的治疗

学习Qt时遇到的问题,找到的解决方案。
:不保证说的一定对!
:不定期更新。

---------------------------------

Q:
QVariant 保存指针数据

A1:
1,使用QVariant::fromValue((void*)target)保存数据
2,使用(ShortcutItem*)(v.value()) 提取数据

A2:
1,使用Q_DECLARE_METATYPE(ShortcutItem*) 声明metatype。
2,QVariant::fromValue(target) 保存数据
3,直接使用 (v.value())提取数据,不必强制类型转换


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',(Make sure 'QMap' 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());























你可能感兴趣的:(Qt/C++,C++,qt,疑难杂症)