我试图通过以下方法将QString转换为char*类型,但它们似乎不起作用.
//QLineEdit *line=new QLineEdit();{just to describe what is line here}
QString temp=line->text();
char *str=(char *)malloc(10);
QByteArray ba=temp.toLatin1();
strcpy(str,ba.data());
Run Code Online (Sandbox Code Playgroud)
你能用这种方法详细说明可能的缺陷,还是提供另一种方法?
qmake *.pro和*.pri配置文件有什么区别?
什么应该进入*.pro文件,什么应该进入*.pri文件?
我QByteArray和他有问题QString.
我正在读取文件并将其信息存储在一个文件中QByteArray.该文件是unicode,因此它包含以下内容:t\0 e\0 s\0 t\0 \0 \0
我试图将此值与我的指定值进行比较,但它失败了,因为在调试器中我看到它不是unicode字符串.
代码将解释一切:
QByteArray Data; //contains unicode string "t\0 e\0 s\0 t\0 \0 \0"
QString myValue = "test"; //value to compare.
if(Data.contains(myValue))
//do some stuff.
else
//do other stuff.
Run Code Online (Sandbox Code Playgroud)
在调试器中,它向我显示变量Data具有值"t\0 e\0 s\0 t\0 \0 \0"并myValue具有值"test".我该如何解决?
我怎么知道我使用的是哪个版本的Qt?当我打开Qt Creator时,它显示"欢迎来到Qt Creator 2.3".但是,在构建设置中,它显示Qt Version 4.7.1.
读了一些文章后,像这样关于Qt信号插槽通信还是有关于排队的连接问题.
如果我有一些线程一直向对方发送信号,并且假设一个thread_slow在它的事件循环中运行一个慢速方法而另一个thread_fast运行一个快速的方法发送多个信号,而另一个线程仍在运行它的慢速方法...... ..当thread_slow返回到事件循环的慢速方法时,它会处理之前发送的所有信号thread_fast还是最后一个发送的所有信号(所有信号都是相同的类型)?
如果它将处理所有信号,是否有办法使thread_slow 唯一的过程成为最后一个?(考虑到多线程应用程序中的"最后一个"可能是模糊的,让我们考虑线程要求最后一个信号之前的最后一个信号,为了简单起见,所以在线程查找最后一个时发送的新信号可能会丢失).
(我问这个是因为我有多个线程从多个线程接收数据,我不希望它们处理旧数据,只是最后一个发送的数据)
我已经进行了一些测试,看来Qt将处理所有信号.我做了一个线程:
while(true)
{
QThread::msleep(500);
emit testQueue(test);
test++;
}
Run Code Online (Sandbox Code Playgroud)
另一个插槽将执行:
void test::testQueue(int test)
{
test.store(private_test.load() + test);
emit testText(QString("Test Queue: ") + QString::number(private_test.load()));
}
Run Code Online (Sandbox Code Playgroud)
并且线程将运行:
while(true)
{
QThread::msleep(3000);
QCoreApplication::processEvents();
private_test.store(private_test.load() + 1000);
}
Run Code Online (Sandbox Code Playgroud)
我每隔500毫秒从一个线程向另一个线程发送一个信号,另一个线程休眠3000毫秒(3秒)然后唤醒并将内部变量递增100.每次执行一个插槽时它会发出一个文本收到的值+内部变量.我得到的结果是,每次 QCoreApplication::processEvents();调用,所有信号都被执行....(我编辑了这部分是因为我在之前的代码中发现了一个错误)
std::vector::size()返回一个size_type无符号的,通常是相同的size_t,例如64位平台上的8个字节.
相比之下,即使在64位平台上也会QVector::size()返回一个int通常为4个字节的数据,并且它会被签名,这意味着它只能在2 ^ 32的一半时间内返回.
这是为什么?这似乎非常不合逻辑并且在技术上也有限制,虽然你很可能不需要超过2 ^ 32个元素,但是使用signed int会减少一半,这是没有明显的理由.也许是为了避免编译器警告让人们懒得声明i为一个uint而不是一个int谁决定让所有容器返回一个没有意义的大小类型是一个更好的解决方案?原因可能不是那么愚蠢?
鉴于以下代码:
void test(int var)
{
Q_UNUSED(var);
#ifdef SOMETHING
printf("%d",var);
//do something else with var...
#endif
}
Run Code Online (Sandbox Code Playgroud)
Q_UNUSED如果我在某些情况下实际使用'var'变量(如上例中所示),那么宏是否有任何影响,或者当我抑制未使用变量的编译器警告时它根本没有效果?
到目前为止,我发现它没有效果,但我想确定一下.
我试图从我想写的文件中获取相对路径.这里有一个情况:
我保存了一个conf文件D:\confs\conf.txt.我在我的程序中有一些文件从中读取D:\images\image.bmp.在我conf.txt想要的../images/image.bmp.
我看到一些有用的课程QDir,QFileInfo但我不知道它最好用什么.我试过了:
QDir dir("D:/confs");
dir.filePath(D:/images/image.bmp) // Just return the absolute path of image.bmp
Run Code Online (Sandbox Code Playgroud)
我阅读了文档,它说filePath只能处理目录集中的文件(这里D:\confs),但我想知道是否有办法指示从不同的目录搜索并获得他的相对路径.
我从Qml获取文件路径,如下所示:
mainView.projectFilePath = Qt.resolvedUrl(newProjectFileDlg.fileUrl).toString();
Run Code Online (Sandbox Code Playgroud)
上面的文件路径如下所示:file:/// C:/uuuu.a3
但当这条路径传递给QFile时,它会抱怨
The filename, directory name, or volume label syntax is incorrect
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题呢?
是否有任何跨平台方式来获取Qt C++程序中的当前用户名?
我已经抓取了互联网和解决方案的文档,但我发现的唯一的事情是依赖于操作系统的系统调用.
qtcore ×10
qt ×9
c++ ×8
qstring ×2
macros ×1
pyqt ×1
qbytearray ×1
qdir ×1
qfileinfo ×1
qmake ×1
qml ×1
qt-creator ×1
qt-signals ×1
qt4 ×1
qtcpsocket ×1
qthread ×1
qurl ×1
qvector ×1
size ×1