• 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:xxdebugC: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());
  • 相关阅读:
    ios tablevie 圆角
    IOS window(窗口)、视图(view)frame的学习
    iOS 测试用代码
    自定义导航条UINavigationbar
    前端正则表达式书写以及常用的方法
    JavaScript中的类、原型、原型链、继承(转载)
    简单详细讲解js闭包(转载)
    前端中的事件循环eventloop机制(转载)
    CSS优化技巧,可缩短页面加载时间(转载)
    程序员如何快速提高编程能力?快来看大牛的方法(转)
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/4761914.html
Copyright © 2020-2023  润新知