标签: qt4

问:如何组织多个班级的单元测试?

我有一个Qt Unit测试(子)项目,它生成一个类(主生成的QTEST_APPLESS_MAIN).我可以在Qt Creator中作为控制台应用程序启动它.

问:如何将其他类作为测试用例添加到此特定项目中.

  1. 如果这些类只有"test"槽(private Q_SLOTS),则不调用方法,而只调用类的方法QTEST_APPLESS_MAIN
  2. 由于只能有一个main(..),我不能QTEST_APPLESS_MAIN在项目中使用多个类(这是正确的吗?)
  3. 当然,我可以手动"连接"(附加)类中的插槽与包含该类的一个类main,但这非常繁琐.

那么在单元测试项目中对几个类运行单元测试的最佳方法是什么?

PS:在" 在项目中使用QT单元测试 - 冲突的主(...)函数 " 中提到博客,但是,我无法下载描述解决方案的zip.

Qt单元测试子项目

unit-testing qt4 qt-creator

29
推荐指数
3
解决办法
9384
查看次数

PyQt在连接信号时将参数发送到插槽

我有一个任务栏菜单,单击时连接到获取触发事件的插槽.现在问题是我想知道单击了哪个菜单项,但我不知道如何将该信息发送到连接的功能.这是用于将动作连接到函数:

QtCore.QObject.connect(menuAction, 'triggered()', menuClickedFunc)
Run Code Online (Sandbox Code Playgroud)

我知道有些事件返回一个值,但是trigger()没有.那么我该如何实现呢?我必须自己制作信号吗?

python qt4 pyqt

28
推荐指数
3
解决办法
3万
查看次数

如何在QFileDialog上设置选定的过滤器?

我有一个带有三个过滤器的打开文件对话框:

QString fileName = QFileDialog::getOpenFileName(
        this,
        title,
        directory,
        tr("JPEG (*.jpg *.jpeg);; TIFF (*.tif);; All files (*.*)")
);
Run Code Online (Sandbox Code Playgroud)

这将显示一个对话框,其中"JPEG"被选为默认过滤器.我想按字母顺序放置过滤器列表,因此"所有文件"在列表中排在第一位.但是,如果我这样做,"所有文件"是默认选择的过滤器 - 我不想要.

我可以为此对话框设置默认选定的过滤器,还是必须使用第一个指定的过滤器?

我尝试指定第5个参数(QString)来设置默认选择的过滤器,但这不起作用.我认为这可能只用于检索用户设置的过滤器.

c++ qt qt4

28
推荐指数
1
解决办法
3万
查看次数

我如何从另一个班级发出信号?

我的Qt应用程序有问题.我正试图从另一个类中发出一个信号(它是放置信号的嵌套类).

我已经将信号连接到一个插槽,应该没问题.但是当我尝试从这个嵌套类中发出这个信号时,我得到编译器错误:

没有对象就无法调用成员函数

怎么了?我在Qt文档中找到了它,但找不到合理的解决方案甚至解释.

简化的类定义如下所示.

class LogWriter : public QDialog
{   
   Q_OBJECT

public:
   class Log : public QObject
   {
      Q_OBJECT

   public:
      bool print;

      Log(bool _print, QString _color, QObject *obj = NULL)
         : QObject(obj)
      {
         print = _print;
         color = _color;
      }
   };

   LogWriter(QWidget * parent = 0);
   ~LogWriter();

public slots:
   void setMinVal();
   void setMediumVal();
   void setHighVal();
   void cleanWindow();
   void appendText(QString &text);

signals:
   void signalLogAppend(QString);
};
Run Code Online (Sandbox Code Playgroud)

LOW使用以下函数调用将客户端代码中LogWriter 实例的信号连接到某个插槽:

connect(&LOW, SIGNAL(signalLogAppend(QString)),
        this, SLOT(appendText(QString&)),
        Qt::DirectConnection);
Run Code Online (Sandbox Code Playgroud)

c++ qt qt4 signals-slots

28
推荐指数
1
解决办法
3万
查看次数

Qmake中win64配置的标识符

Qmake项目文件中是否有"win64"标识符?Qt Qmake高级文档除了unix/macx/win32之外没有提及.

到目前为止,我已尝试使用:

win32:message("using win32")
win64:message("using win64")
amd64:message("using amd64")
Run Code Online (Sandbox Code Playgroud)

结果总是"使用win32".

我必须为x32和x64项目使用单独的项目文件,因此它们会针对正确的库进行编译吗?有没有其他方法可以识别32位和64位环境?

windows 64-bit qt qmake qt4

27
推荐指数
3
解决办法
2万
查看次数

如何在GUI框架中集成Boost.Asio主循环,如Qt4或GTK

有没有办法将Boost.Asio与Qt4(首选)或GTK主循环集成?GTK像API一样提供poll(2),因此技术上应该是可行的.Qt提供了自己的网络层,但我更喜欢使用为Boost.Asio编写的现有代码.我想在使用额外线程的情况下集成它们.

有没有参考如何为Qt4(首选)或GTKmm做这个?

谢谢.

编辑

我想澄清一些事情,以使答案更容易.Qt和GTKmm都提供"选择类似"功能:

所以,问题是,如何将现有的"选择器/轮询器"作为反应器集成到Boost.Asio中io_service.今天,Boost.Asio可以使用select,kqueue,epoll,/ dev/poll和iocp作为reactor/proactor服务.我想将它集成到GUI框架的主循环中.

欢迎任何建议和解决方案(更好).

gtk qt4 event-loop boost-asio

27
推荐指数
3
解决办法
1万
查看次数

Google地图中多个标记的网址

在桌面Qt应用程序中,我有一些GPS坐标,我想在地图上显示.我的计划是使用坐标构建一个URL,让网页浏览器和谷歌地图或类似的服务完成繁重的工作.

在阅读了一些明显的逆向工程文档之后

mapki.com slash wiki slash Google_Map_Parameters
Run Code Online (Sandbox Code Playgroud)

我可以让它适用于单点,但多点的URL语法是什么?

到目前为止,我最好的拍摄是建立一个像这样的字符串:

http://maps.google.com/?ie=UTF8&q=My+First+Point@59.591,17.82&q=My+Second+Point@59.592,17.82

但这只会显示"我的第二点".在某处有更好的语法描述吗?


用标记=替换q =不起作用,下面的"静态地图"建议仅抱怨不正确的API密钥.

url google-maps qt4

27
推荐指数
3
解决办法
5万
查看次数

QSlider值改变信号

我正在使用QSlider(v4.6)进行输入以及向用户提供反馈.对于反馈,我将调用setValue方法.我试图找到一个只有在用户修改了值时才会触发的信号.当用户更改值以及调用setValue时,将触发valueChanged信号.sliderMoved仅在用户拖动滑块时触发(而不是在使用键盘时).我检查了API文档,似乎找不到任何东西.我错过了什么吗?这看起来很常见.如果没有其他信号,您会如何建议我模拟此功能?我应该在调用setValue之前设置一个标志,每次调用setValue时断开并重新连接信号......?

c++ qt4 qslider

26
推荐指数
1
解决办法
9330
查看次数

带有QString类型的C++中的switch/case语句

我想在我的程序中使用switch-case但编译器会生成错误.我如何使用该switch语句QString

编译器给我这个错误:

switch expression of type 'QString' is illegal
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

bool isStopWord( QString word )
{
bool flag = false ;

switch( word )
{
case "the":
    flag = true ;
    break ;
case "at" :
    flag = true ;
    break ;
case "in" :
    flag = true ;
    break ;
case "your":
    flag = true ;
    break ;
case "near":
    flag = true ;
    break ;
case "all":
    flag = true ;
    break ;
case …
Run Code Online (Sandbox Code Playgroud)

c++ qstring qt qt4 switch-statement

26
推荐指数
4
解决办法
7万
查看次数

与Qt 4.8相比,为什么FlowLayout在Qt 5.2中的表现不同?

我刚刚将我的应用程序从Qt 4.8.4移植到Qt 5.2.1.我在Qt文档FlowLayout中的FlowLayout示例代码中提供了类的问题.

我有QMainWindow一个QDockWidget停靠在中央部件的底部.该QDockWidgetFlowLayout几个子部件.在Qt 4.8中,这就像一个魅力,儿童小工具的大小符合标准尺寸DockWidget.但是,在Qt 5.2中,DockWidget尝试将其大小增加到最大值(从中央小部件取代).更改其布局可防止此不良行为.但当然,我FlowLayout是故意使用的.

为了说明这个问题,我创建了一个最小的例子:

构造函数DockWidget:

    QGroupBox *generalBox = new QGroupBox("");
    generalBoxLayout = new FlowLayout;
    generalBox->setLayout(generalBoxLayout);

    for(int i=0; i<10; ++i)
    {
        QPushButton *button = new QPushButton("Test", this);
        button->setMinimumWidth(100);
        button->setMinimumHeight(100);
        generalBoxLayout->addWidget(button);
    }

    this->setWidget(generalBox);
Run Code Online (Sandbox Code Playgroud)

有人知道问题是什么以及我如何解决它?

编辑 我创建了一个新的最小工作示例,遗憾的是无法重现Qt 4.8和Qt 5.2之间的差异.同样的问题出现在Qt 4.8中,所以我仍然想在这里介绍它:

显示底部停靠的dockwidget占据整个垂直空间的初始视图: 显示底部停靠的dockwidget的初始视图

使用鼠标调整dockwidget的大小后查看 使用鼠标调整dockwidget的大小后查看

使用鼠标调整主窗口大小后查看 使用鼠标调整主窗口大小后查看

这些屏幕截图显示,在手动更改dockwidget的大小后,dockwidgets的行为与预期一致.但是,在初始化时,窗口小部件从中央窗口小部件获取所有可用空间,这是不希望的.

有人知道解决方案/解决方法吗?

qt qt4 flowlayout qdockwidget qt5

26
推荐指数
1
解决办法
2108
查看次数