Ncurses和Qt的互操作性
拥有基于QT和Ncurses的应用程序,在等待用户输入时每秒刷新屏幕的最佳方法是什么? (例如,显示时钟并获取用户输入). 我需要CPU使用和应用响应能力之间的最佳折衷. 更具体地说,如何获取用户输入并仍然使用QTimer以及信号插槽机制? 使用下面的代码时,计时器不起作用. nodelay(stdscr,true); while(1) { sleep(1); getch(); processInput(); } 解决方案 使用QSocketNotifier在stdin上可用的事物通知. 在循环中调用非块getch(),直到没有更多输入为止.这至关重要:只有在可用的 new 数据时,该通知者才会通知,但这并不意味着它会在每个字符上通知!如果您一次一次收到多个字符,通常只会收到一个通知 - 因此,您必须继续发出非阻止getch(),直到返回ERR这意味着目前没有更多数据. 您还应该阅读所有在附加插座通知器之前获得的所有数据. 下面的代码在
2 2023-04-20
编程技术问答社区
QSerialport没有GUI,没有线程:Qobject :: startTimer:只能与Qthread启动的线程一起使用计时器
使用QSerialPort,我正在使用 no gui (TEMPLATE = lib)进行DLL.我不创建线程,也不需要任何线程:我没有GUI,并且拥有阻止串行端口操作是没有问题的,这就是我想要的. 做: while (!serial_uart->isWritable()); while (!serial_uart->write(frame)); 我得到: qobject :: startTimer:只能与qthread 启动的线程一起使用计时器 问题:如何在没有GUI的图书馆中使用QSerialPort而不会触发此错误? 注意:我首先认为这个问题来自 最小可重现的DLL示例: test.cpp #include "test.h" extern "C" { __declspec(dllexport) Test* new_Test() { return new Test(); } __declspec(dllexport) vo
68 2023-04-07
编程技术问答社区
Qt多线程通信
我是C ++和QT的新手,并且在实现良好且没有过度复杂的多线程通信环境方面遇到了一些麻烦. 基本上,我有3个线程,一个用于GUI,另一个用于处理由USB连接到PC的device发送的更新,另一个将处理由device>和control获得的信息device和GUI改变其状态.因此,基本上是3个线程:GUI,device和control. 我的拳头方法是让device使用USB发送的信息填充其私人成员,并具有一些get()方法来转换此数据并返回它(使用Mutexes确保数据仍然有效).问题是control在device中调用control方法时,它不会返回任何新的东西(我期望这些方法甚至永远不会返回,因为线程已锁定在另一种方法中,但是它们确实返回,没有新的新方法信息,并且在这些get()方法中也没有触发断点). 通常的方式QT QT使用信号和插槽是通过使用信号和插槽,但是信号和插槽的问题是,当一个线程正在处理并且具有插槽时,如果发送某些信号,将永远不会执行此插槽.即使我可以
0 2023-04-06
编程技术问答社区
了解带有Lambda和递归函数调用的QTimer
我有以下代码: void class::Testfunc() { QTimer* timer = new QTimer; QObject::connect(timer, &QTimer::timeout, [this](){ emit Log("Time out..."); TestFunc(serverAddress, requestsFolderPath); // deleteLater(); //*** why does this crash if used to replace the connect below? }); connect(timer, &QTimer::timeout, timer, &QTimer::deleteLater); timer->setSingleShot(true); timer->start(1000); } 创建一个单个射击计时器,该计时器
2 2023-03-02
编程技术问答社区
QThread Slots行为
我是C ++和QT的新手无限循环处理? object2中的slot是否会因为忙于运行循环而永远不会被调用? 解决方案 我是C ++和QT的新手,我想知道如果我在thread1中运行的object1中发出信号会发生什么,向另一个thread2和object2中运行的另一个object2运行一个无限循环进行处理?由于thread2忙于运行循环? 是,否. 如果您不处理事件,则该线程不会像您期望的那样处理事件,信号和插槽. 但是,您可以在那里进行一个事件循环,偶尔会处理事件进入,然后它会按照您的期望工作. 我的解释比这更长的解释在这里对于那些想获得有关该主题更多详细信息的人./p>
12 2023-03-02
编程技术问答社区
QThread的奇怪行为
我有一个运行一些代码的QThread,我希望它能很好地退出并进行一些清洁,因此代码为: testdevice.h class testDevice : public QThread { Q_OBJECT ... // some definitions protected: void run(void); private: hid_device *handle; bool abort; public: ~testDevice(void); }; testdevice.cpp testDevice::~testDevice(void) { mutex.lock(); abort = true; mutex.unlock(); wait(); if (handle != NULL) { hid_close(handle); } hi
16 2023-03-02
编程技术问答社区
通过网络发送结构化数据
我是网络编程中的重点,所以,对不起,如果我的问题看起来有些明显. 我正在尝试将一些数据从QT应用程序发送到Python服务器,该数据将处理并发送一些答案. 允许我在QTcpSocket类中发送数据的方法为: // ... write(const QByteArray &) write(const char *) // ... 我的应用程序将管理:身份验证,发送和接收一些复杂数据,例如struct和文件. 我对这种情况有很多问题: 上面提到的方法足以发送复杂的数据,以及如何? 如何处理服务器端(使用Python)中的数据类型? 您认为我应该使用其他原始的http(QNetworkAccessManager类)? 解决方案 试图回答您的问题: 上面提到的方法足以发送复杂的数据,以及如何? 好吧,是的,发送一个原始字节阵列是最低级别的格式.但是,您需要一个的东西,可以使您从复杂的数据到字节数组以及从字节数组返回复杂数据. . 此
24 2023-03-02
编程技术问答社区
连接。没有这样的插槽 QTreeView
我从QTreeview 继承了一个类MainTree maintree.cpp文件 void MainTree::LaunchTree() { //Tree launching connect(this, SIGNAL(customContextMenuRequested(const QPoint& )),this,SLOT(showCustomContextMenu(const QPoint&))); } void MainTree::showCustomContextMenu(const QPoint &pos) { //Add actions } 但是我得到以下错误 QObject::connect: No such slot QTreeView::showCustomContextMenu(const QPoint&) 我不明白为什么,我错过了什么? 类的定义MainTree class MainTree : public QT
8 2023-03-01
编程技术问答社区
QCoreApplication无视退出信号而挂起
当事件循环启动之前,同步触发信号qcoreApplication :: quit()时,信号被忽略并永远悬挂.但是,从QTimer触发,应用程序正确退出.启动可以在EXEC启动之前立即返回的任务的正确方法是什么? 这是重现此行为的最小代码: hang.h #ifndef HANG_H #define HANG_H #include class hang : public QObject { Q_OBJECT public: explicit hang(QObject *parent = 0); signals: void done(); public slots: void foo(); }; #endif // HANG_H hang.cpp #include "hang.h" #include hang::hang(QObject *parent) : QObjec
102 2023-03-01
编程技术问答社区
如何改变当前工作目录?
我正在研究一个程序,该程序将文件从某个目录中获取,并将其复制到QT的工作目录,以通过我的应用程序读取.现在,我目前的路径是: /users/softwaredev/desktop/user1/build-viewer-desktop_qt_qt_qt_5_4_4_4_0_clang_64bit-debug/viewer.app/conents/conents/macos/macos/viewer 要得到这个,我使用了: qDebug()
8 2023-03-01
编程技术问答社区
为什么qjsonvalue todouble转换会导致数据丢失?
qjsonvalue toDouble()转换会产生错误的值,从而导致数据丢失. QJsonObject obj; obj.insert("dbl",double(73183493944884961)); double d = obj.value("dbl").toDouble(); qulonglong ul = d; qulonglong ul2 = 73183493944884961; qDebug () int main() { qulonglong ul2 = double(7
8 2023-02-28
编程技术问答社区
如何将QCommandLineParser用于具有多个参数的参数?
我想知道,如何使用 /home/my_app --my_option_with_two_params first_param second_param --my-option-with-one-param param? 解决方案 尝试以-I /my/include/path1 -I /my/include/path2的类比: --my_option_with_two_params first_param --my_option_with_two_params second_param ...然后您可以使用 this方法可以访问值: qStringList qcommandlineparser :: values(const qString&optionName)const 返回给定选项名称optionName的选项值列表,或者如果找不到的空名单. 所提供的名称可以是添加AddOption()的任何选项的任何长名称. 在这里您可以找到一个有效的简
48 2023-02-27
编程技术问答社区
如何在Qt中检测Windows关机或注销的情况
我正在将Linux应用程序移植到用QT编写的Windows上.该应用程序需要在关闭之前保存一些设置.在Linux上,我们可以通过信号处理程序进行sigterm等.我如何在Windows上实现相同的操作. 解决方案 如果您使用的是QT事件循环,则可以捕获以下信号: void qcoreapplication :: abouttoquit()[signal] 当应用程序即将退出主事件循环时,将发出此信号,例如当事件循环级别下降到零时.这可能会在从应用程序内部或用户关闭整个桌面会话后拨打()后发生. 如果您的应用程序必须进行最后一秒钟的清理,该信号特别有用.请注意,在此状态下不可能进行用户互动. 除此之外,如果上述信号不适合您的用例,您可能会在下面寻找以下消息: wm_quit: wm_close: wm_queryendsession: wm_endsession:其他解决方案 我认为其他答案完全错过了重点:当您强行结束应用程序时,就像Unix上的Sigki
8 2023-02-27
编程技术问答社区
继承自QObject后,Qt "信号未定义的引用错误"
我最近需要在类中添加一个信号,因此我更改了从qobject继承的类,并将q_object宏添加到类定义中.这样,我得到"信号不确定的参考错误,'vtable for clicommand'" 在下面的类行上的错误: : // File clicommand.h #include #include #include #include "telnetthread.h" class CLICommand : public QObject { Q_OBJECT public: CLICommand(TelnetThread *parentTelnetThread); signals: void signal_shutdown_request(); private: TelnetThread *m_parentTelnetThread; 和第二个误差" clicommand'vtable
18 2023-02-27
编程技术问答社区
如何从C++中访问一个嵌套的QML对象?
这是一个可再现的示例: main.qml import QtQuick 2.0 Item { id : root width: 360 height: 360 Text { id : t1 text: qsTr("Hello World") property int someNumber: 1000 anchors.centerIn: parent } MouseArea { anchors.fill: parent onClicked: { Qt.quit(); } } } main.cpp #include #include #include #include
8 2023-02-27
编程技术问答社区
如何从槽中找出哪个信号调用了这个槽?
我的意思是,如果我有许多连接到同一插槽的信号.我看到了 this a href =" http://web.archive.org/web/20111205031906/http://doc.qt.nokia.com/latest/signalsandslots.html"答案.你能给我简单的例子吗? 解决方案 我认为您可以使用此方法: [protected] int QObject::​senderSignalIndex() const 来自QT文档: 返回信号的元方法索引,该索引称为当前执行的插槽,这是Sender()返回的类的成员.如果返回信号激活的插槽的外部,则返回-1. 对于具有默认参数的信号,此函数将始终用所有参数返回索引,而不管哪个参数与Connect()一起使用.例如,被破坏的信号(qObject *obj = 0)将具有两个不同的索引(带有和没有参数),但是此函数将始终使用参数返回索引.当用不同参数过载信号时,这不适用. 警告:此功能违反
4 2023-02-25
编程技术问答社区