我有一个Qt Unit测试(子)项目,它生成一个类(主生成的QTEST_APPLESS_MAIN).我可以在Qt Creator中作为控制台应用程序启动它.
问:如何将其他类作为测试用例添加到此特定项目中.
private Q_SLOTS),则不调用方法,而只调用类的方法QTEST_APPLESS_MAINmain(..),我不能QTEST_APPLESS_MAIN在项目中使用多个类(这是正确的吗?)main,但这非常繁琐.那么在单元测试项目中对几个类运行单元测试的最佳方法是什么?
PS:在" 在项目中使用QT单元测试 - 冲突的主(...)函数 " 中提到了博客,但是,我无法下载描述解决方案的zip.

我有一个任务栏菜单,单击时连接到获取触发事件的插槽.现在问题是我想知道单击了哪个菜单项,但我不知道如何将该信息发送到连接的功能.这是用于将动作连接到函数:
QtCore.QObject.connect(menuAction, 'triggered()', menuClickedFunc)
Run Code Online (Sandbox Code Playgroud)
我知道有些事件返回一个值,但是trigger()没有.那么我该如何实现呢?我必须自己制作信号吗?
我有一个带有三个过滤器的打开文件对话框:
QString fileName = QFileDialog::getOpenFileName(
this,
title,
directory,
tr("JPEG (*.jpg *.jpeg);; TIFF (*.tif);; All files (*.*)")
);
Run Code Online (Sandbox Code Playgroud)
这将显示一个对话框,其中"JPEG"被选为默认过滤器.我想按字母顺序放置过滤器列表,因此"所有文件"在列表中排在第一位.但是,如果我这样做,"所有文件"是默认选择的过滤器 - 我不想要.
我可以为此对话框设置默认选定的过滤器,还是必须使用第一个指定的过滤器?
我尝试指定第5个参数(QString)来设置默认选择的过滤器,但这不起作用.我认为这可能只用于检索用户设置的过滤器.
我的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) 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位环境?
有没有办法将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框架的主循环中.
欢迎任何建议和解决方案(更好).
在桌面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密钥.
我正在使用QSlider(v4.6)进行输入以及向用户提供反馈.对于反馈,我将调用setValue方法.我试图找到一个只有在用户修改了值时才会触发的信号.当用户更改值以及调用setValue时,将触发valueChanged信号.sliderMoved仅在用户拖动滑块时触发(而不是在使用键盘时).我检查了API文档,似乎找不到任何东西.我错过了什么吗?这看起来很常见.如果没有其他信号,您会如何建议我模拟此功能?我应该在调用setValue之前设置一个标志,每次调用setValue时断开并重新连接信号......?
我想在我的程序中使用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) 我刚刚将我的应用程序从Qt 4.8.4移植到Qt 5.2.1.我在Qt文档FlowLayout中的FlowLayout示例代码中提供了类的问题.
我有QMainWindow一个QDockWidget停靠在中央部件的底部.该QDockWidget有FlowLayout几个子部件.在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的大小后,dockwidgets的行为与预期一致.但是,在初始化时,窗口小部件从中央窗口小部件获取所有可用空间,这是不希望的.
有人知道解决方案/解决方法吗?
qt4 ×10
qt ×5
c++ ×4
64-bit ×1
boost-asio ×1
event-loop ×1
flowlayout ×1
google-maps ×1
gtk ×1
pyqt ×1
python ×1
qdockwidget ×1
qmake ×1
qslider ×1
qstring ×1
qt-creator ×1
qt5 ×1
unit-testing ×1
url ×1
windows ×1