我是新来的Qt.我有一个工作线程std::thread.工作线程函数在循环中不断地获取一些数据.经常Text在QMLUI 上的元素上更新数据的大小.我有一个监听器回调,它只是一个std::function,它从它被调用thread's function.它向我发送了基于我更新Text元素的回调QML.我用signal slot机制更新它.
以下是QML : Text元素:
Text {
id: mytext
objectName: "mytextobject"
function slotUpdateData(someValue){
mytext = someValue
}
}
Run Code Online (Sandbox Code Playgroud)
SignalUpdateData与连接slotUpdateData其驻留在QML侧.每当我得到的数据事件回调从std::thread我emit SignalUpdateData这更新QML Text element上UI.
void CallBackReceivedFromWorkerThread(float someValue) {
emit SignalUpdateData(someValue)
}
Run Code Online (Sandbox Code Playgroud)
以下是我如何将其C++ signal与QML slot
QObject::connect(this, SIGNAL(SignalUpdateData(QVariant)), myTextItemQObject, SLOT(slotUpdateData(QVariant)));
Run Code Online (Sandbox Code Playgroud)
所有这一切都很好.没有碰撞,锁定,什么也没有.
根据我的理解,由于工作线程的函数正在触发回调,因此当收到回调时,执行控制在工作线程上.所以在做的时候emit SignalUpdateData(someValue),我们仍然在工作线程上.据我之前在 …
我创建了一个抽象类,它只有一组纯虚方法.有3个不同的类具有这些方法的具体实现.
在编写了上述结构之后,我发现派生类中的一些方法具有相同的实现.所以,我将这些函数转移到我的基类的逻辑,并使它们成为虚拟而不是纯虚拟.现在,实现不需要在派生类中重复.这编译并执行正常.
我的基类是纯虚方法和虚方法的混合,它遵循这样的结构是一种很好的设计方法吗?
我使用的组合std::async和std::future从C++ 11.我正在使用对我在代码中执行的某项活动强制执行time_out,这可能需要一些时间,因为我尝试连接到服务器.
以下是代码:
#include <future>
#include <chrono>
std::size_t PotentiallyLongRunningActivity() {
using namespace std::chrono_literals;
std::this_thread::sleep_for(10000s);
return 10;
}
bool DoActivity() {
bool activity_done = false;
auto my_future_result(std::async(std::launch::async, []() {
return PotentiallyLongRunningActivity(); //returns size_t
}));
std::future_status my_future_status = my_future_result.wait_for(std::chrono::milliseconds(800));
if (my_future_status == std::future_status::timeout) {
activity_done = false;
}
else if (my_future_status == std::future_status::ready) {
if (my_future_result.valid() && my_future_result.get() > 0) {
activity_done = true;
}
}
return activity_done;
//my_future_result hangs while exiting this method …Run Code Online (Sandbox Code Playgroud) 我正在使用UIQt项目并保存图像文件QML。以下是我所做的
auto screenshot = quick_item->grabToImage();
screenshot->saveToFile("/somepath/filename.jpeg");
// OR sometimes use like png like
screenshot->saveToFile("/somepath/filename.png");
Run Code Online (Sandbox Code Playgroud)
这在所有平台上都表现得非常好。我打开文件,图像按预期保存。
现在我的问题是:
我刚刚提到.jpeg作为文件扩展名,同时将文件名作为参数提供到saveToFile. 这可行,但是,我是否需要使用它QImageWriter来确保图像实际上以jpeg/png格式压缩?
当它是有损压缩时会发生什么jpeg?
如果我想在android中控制有损压缩,我可以做一个,image.compress(CompressFormat.JPEG, 80, stream)其中80是压缩质量的百分比?
场景:
我在QML中有一个Image组件,其中包含一个纵横比不同的QImage。
码:
Window {
id: app_window
visible: true
Rectangle {
id: my_image_view_container
width: app_window.width
height: app_window.height
Image {
id: my_image
// changes at runtime based on the image my app selects
source: "random/path/to/an/image.jpg"
width: sourceSize.width
height: sourceSize.height
scale: Qt.KeepAspectRatio
}
}
}
Run Code Online (Sandbox Code Playgroud)
问:
我如何设定width及height的my_image_view_container,以适应my_image完全内my_image_view_container不影响到其长宽比?
我有以下代码允许在应用程序窗口上平移图像
代码:
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2
ApplicationWindow {
id: app
visible: true
title: qsTr("Test panning an Image")
width: 700
height: 700
Image {
id: my_image_item
source: "http://doc.qt.io/qt-5/images/declarative-qtlogo.png"
MouseArea{
anchors.fill: parent
drag.target: my_image_item
drag.axis: Drag.XAndYAxis
}
}
}
Run Code Online (Sandbox Code Playgroud)
目标:
我想阻止图像被拖动/平移到其父级之外。
基本上我不想允许 my_image_item被移到以下位置:
my_image_item的右边缘位于其父级左边缘的左侧, my_image_item的左边缘位于其父级右边缘的右侧my_image_item的上边缘位于其父级下边缘的下方my_image_item的底部边缘放置在其父级顶部边缘的上方主要问题:
如何my_image_item在用户拖动时限制仅在其父级边缘内的移动my_image_item?
次要问题:(如果回答那么大):
限制该项目my_image_item的运动需要严格其母公司?或者它可能是另一个不是其父项的项目?(至少一个共享一个共同的 QML 父级)
我试图初始化一个结构数组std::array.我知道以下是一种初始化std::array整数的方法.
std::array<int, 5> arr { {1, 2, 3, 4, 5} };
Run Code Online (Sandbox Code Playgroud)
场景:
但是,假设我有一系列这样的结构
struct MyStruct {
const char *char_val_1;
const char *char_val_2;
int int_val_1;
double d_val_1;
} my_struct_obj[] = {
{ "a1b1" , "a2b1" , 1 , 1.1 },
{ "a1b2" , "a3b1" , 2 , 1.2 },
{ "a1b3" , "a4b1" , 3 , 1.3 },
{ "a1b4" , "a5b1" , 4 , 1.4 },
{ "a1b5" , "a6b1" , 5 , 1.5 },
{ …Run Code Online (Sandbox Code Playgroud) 是否可以像在 C++ 中那样在bash 脚本中通过引用来使用变量?
假设我有一个如下所示的脚本:
#!/bin/bash
A="say"
B=$A
echo "B is $B"
A="say it"
echo "B is $B" # This does not get the new value of A but is it possible to using some trick?
Run Code Online (Sandbox Code Playgroud)
即使 的值已从 更改为,您也会在上面的脚本echo "B is $B输出中看到。我知道重新分配喜欢会解决它。但我想知道是否有可能持有对的引用,以便在更新后立即更新它的值。这发生在没有重新分配的情况下。这可能吗?B is sayAsaysay itB=$ABABAB=$A
我envsubst从Bash 中的 Lazy Evaluation 中读到了。是按照方法去做吗?
A="say"
B=$A
echo "B is $B"
envsubst A="say it"
echo …Run Code Online (Sandbox Code Playgroud) 我有以下字符串,我想从第一个字符串-和第一个字符串之间切出一个子字符串.
something-123_2523123_1232+12312-more-GI2342.txt
Run Code Online (Sandbox Code Playgroud)
我尝试使用如下所示的cut命令:
echo something-123_2523123_1232+12312-more-GI2342.txt | cut -d'-' -f 2
Run Code Online (Sandbox Code Playgroud)
上面的输出123_2523123_1232+12312是正确的一半。该cut命令已-正确选择了第一个,但随后我需要告诉它继续,直到.并输出子字符串。我该怎么做呢?
或者如何切出第一个-和之间的子字符串.?
我是 Qt 和 QML 的新手。我正在使用 QtQuick 2.4。我有TextInput一个在文件中定义了信号的项目,qml如下所示:
import QtQuick 2.4
TextInput {
text: "Text"
cursorVisible: true
signal qmlSignal(string msg)
}
Run Code Online (Sandbox Code Playgroud)
我还有一个与qmlSignal. TextInput我想在用户完成字段输入或关闭 qml 页面以转到应用程序中的另一个页面时触发信号。
实现此所需功能的正确方法是什么?有没有类似的东西onFocusChanged false我可以检测并触发 qml 信号?
我尝试搜索,但无法获得如何在 qml 中执行此操作的示例
我有一个带有.sh扩展并在OSX环境中运行的shell脚本,我在其中设置了如下变量:
booean_var1 = false
booean_var2 = true
Run Code Online (Sandbox Code Playgroud)
并且根据2个变量进行if检查
if [ $booean_var1 ] || [ $booean_var2 ]
then
echo one of them is true
fi
Run Code Online (Sandbox Code Playgroud)
在一台OSX机器上以bash运行它可以正常工作.但是我从另一台OSX机器上执行了我的shell脚本并在那里用bash运行它
booean_var1 command not found
Run Code Online (Sandbox Code Playgroud)
shell脚本语法与bash在一台机器上的区别是什么?