我已经安装了Qt SDK 5.0.0 beta 2和Qt Creator 2.6.0.它会检测到包,但会发出"未安装qmlviewer"的警告.我找了它,它在SDK bin文件夹中.我能做什么?我使用ubuntu 12.04并将SDK二进制文件添加到PATH中.我可以通过终端查看QML文件.
我有一个Qt5桌面项目,我在Qt Creator编辑器中添加了一个"resource.qrc"文件,该文件在项目的.pro文件中创建了以下行:
RESOURCES = resource.qrc
Run Code Online (Sandbox Code Playgroud)
我放了一个空白前缀和一个png文件(14x14),我试着像这样使用它:
QPixmap pixmap = QPixmap ("://my_image.png");
ui->combobox->addItem(QIcon(pixmap), "itemname");
Run Code Online (Sandbox Code Playgroud)
问题是:图标不会出现!
以下作品:
QPixmap pixmap(14,14);
pixmap.fill(QColor("red"));
ui->combobox->addItem(QIcon(pixmap), "itemname");
Run Code Online (Sandbox Code Playgroud)
所以问题必须在资源嵌入过程中..我注意到生成的"exe"里面没有资源部分...我没有静态链接的外部库,所以我认为我不需要Q_INIT_RESOURCE(资源)宏(它给我未定义的外部)
更新:我在这里发布我的qrc文件:
<RCC>
<qresource prefix="/">
<file>my_image.png</file>
</qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)
它非常简单,我不明白为什么在运行时图标没有出现
在Qt4,使用下面的代码QUrl工作:
QUrl u;
foreach (const settings::PostItem & pi, settings.post)
u.addQueryItem(pi.name, pi.value);
postData = u.encodedQuery();
Run Code Online (Sandbox Code Playgroud)
注意:此代码来自wkhtmltopdf并且postData是QByteArray.
但是,Qt5不再具有该addQueryItem()功能.你如何移植这段代码?
我目前正在尝试将我的Qt应用程序移植到Mac OSX,只是遇到了以下问题:
我的一个窗口类(派生自QMainWindow)在按下关闭按钮时显示一个对话框,您可以在其中保存/放弃更改或中止.这是通过重新实现closeEvent来完成的,如下所示:
void ResultsWindow::closeEvent(QCloseEvent* event)
{
if (isWindowModified())
{
activateWindow();
QMessageBox::StandardButton button = QMessageBox::warning(
this,
APPLICATION_NAME,
"Warning: data have been modified. Do you want to save the "
"changes?",
QMessageBox::Save | QMessageBox::Discard | QMessageBox::Abort,
QMessageBox::Abort);
switch (button)
{
case QMessageBox::Save:
if (!Save())
{
event->ignore();
return;
}
break;
case QMessageBox::Discard:
break;
case QMessageBox::Abort:
default:
event->ignore();
return;
}
}
event->accept();
}
Run Code Online (Sandbox Code Playgroud)
预期的行为如下:如果单击"中止",则忽略该事件并且窗口保持打开状态.这在Linux和Windows上按预期工作.但是,在OSX上,窗口是隐藏的,但在后台仍然有效.我在这里错过了什么?如何确保窗户保持打开状态?
更新:
我不知何故认为这是Qt5的一个问题.如果该closeEvent方法只包含event->ignore();窗口仍然关闭.我不认为这是预期的行为.也许我应该把这个问题发布到Qt邮件列表......
更新:这是Qt中的一个错误,自5.1版本开始解决.
我为Windows 32位安装了Qt 5.0.1(MinGW 4.7,823 MB)
然后我创建了简单的Quick 2应用程序并编译它.应用程序位于其文件夹中,并且应用程序从QtCreator运行.我想在没有QtCreator的情况下运行这个exe文件.为此,我从C:\ Qt\Qt5.0.1\5.0.1\mingw47_32\bin复制文件:
然后我得到错误:
Точкавходавпроцедуру_ZN6icu_4910CharString15getAppendBufferEiiRiR10UErrorCodeненайденавбиблиотекеDLIicuuc49.dll
翻译:
在库DLL icuuc49.dll中找不到过程入口点_ZN6icu_4910CharString15getAppendBufferEiiRiR10UErrorCode
如果我将exe文件复制到文件夹C:\ Qt\Qt5.0.1\5.0.1\mingw47_32\bin(其中都是dll),程序运行,但没有显示.
如果我将exe文件复制到文件夹C:\ Qt\Qt5.0.1\Tools\QtCreator\bin(其中都是dll),程序不会运行.
该怎么办?程序运行的位置和库是什么?
解决了.C:\ Qt\Qt5.0.1\5.0.1\mingw47_32\bin中的最终库列表:
我忘了添加qml文件的文件夹.
在Qt中,可以指定Info.plist在Mac上构建时要使用的文件,如下所示:
QMAKE_INFO_PLIST = MyInfo.plist
Run Code Online (Sandbox Code Playgroud)
这将Qt自动生成的Info.plist文件替换为另一个.
而不是完全替换Qt的自动生成的,是否可以添加单个条目?
我不认为它会带来什么实际差别,但我希望能够做到这一点,因为我觉得添加我想要的其他项目而不是粗暴地替换整个文件会更"整洁".
我刚刚为Windows 32位(MinGW 4.8,OpenGL)安装了Qt 5.1.1,并尝试将其添加到我的cmake中.但是CMake只是不想找到它,我不知道为什么.我错过了什么?我需要设置环境变量吗?
这是我的cmake:
cmake_minimum_required( VERSION 2.8.11 )
PROJECT(Blemmer)
# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)
# Detect and add SFML
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules" ${CMAKE_MODULE_PATH})
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib )
find_package(SFML REQUIRED system window graphics network audio)
# The QUIET option disables messages if the package cannot be found.
FIND_PACKAGE(Qt5Widgets)
add_subdirectory(Entity)
add_subdirectory(Engine)
add_subdirectory(Game)
add_executable(Blemmer main.cpp)
include_directories(${SFML_INCLUDE_DIR} ${PROJECT_SOURCE_DIR})
target_link_libraries(Blemmer ${SFML_LIBRARIES} Game Engine Qt5::Widgets)
Run Code Online (Sandbox Code Playgroud)
这是cmake-gui的输出:
CMake …Run Code Online (Sandbox Code Playgroud) 首先,我想提一下,我发现相关文章如何在Qt屏幕上获取鼠标位置?但它对我来说"只是没用".我做了一些测试,结果没有按照我的预期发挥作用,所以我决定发一个新帖子谈谈我做的测试,并找到一个替代解决方案.
这是我用来进行测试的代码:
QScreen *screen0 = QApplication::screens().at(0);
QScreen *screen1 = QApplication::screens().at(1);
printf("screen0 %s \n", screen0->name().toStdString().c_str());
printf("screen1 %s \n", screen1->name().toStdString().c_str());
// Position on first screen.
QPoint pos0 = QCursor::pos(screen0);
// Position on second screen.
QPoint pos1 = QCursor::pos(screen1);
printf("pos 0: %d, %d \n", pos0.x(), pos0.y());
printf("pos 1: %d, %d \n", pos1.x(), pos1.y());
// Get position without screen.
QPoint pos = QCursor::pos();
printf("pos: %d, %d \n", pos.x(), pos.y());
Run Code Online (Sandbox Code Playgroud)
我期待的是,只有一个屏幕会返回一个有效位置,因为光标只在一个屏幕上,而不在两个屏幕上.但情况并非如此,两个位置(pos0和pos1)具有完全相同的值,正如我们在输出中看到的那样:
screen0 DVI-D-0
screen1 HDMI-0
pos 0: 1904, 1178 …Run Code Online (Sandbox Code Playgroud) 基本上我想要的是QMediaRecorder通过提供QImage我在运行时在自定义代码中生成的s 序列作为源来编码视频.
到目前为止,我没有发现任何简单的方法来做到这一点,并在解决方案的所有点,我必须以某种方式实现自己的子类QMediaService和/或QMediaControl这需要QImage作为输入,将它们注册并以某种方式让QMediaRecorder使用它们.但是根据关于这个主题的官方Qt文档中的这个页面,这是一条较少旅行的道路,我自己:
通常,实施QMediaService不在本文档的范围之内,应寻求相关邮件列表或IRC渠道的支持.
我在这篇文章中希望拥有这些知识的人可以了解如何做到这一点.我认为记录这组功能将为Qt5的用户开辟许多有用的可能性.
qt5 ×10
qt ×9
c++ ×5
qml ×3
qtquick2 ×2
cmake ×1
icons ×1
info.plist ×1
macos ×1
multiscreen ×1
qicon ×1
qquickitem ×1
qt-creator ×1
qt-quick ×1
qtwidgets ×1
qurl ×1