关于 setBackgroundImage 和 setImage

本文详细对比了UIButton中setBackgroundImage和setImage两种方法的区别:前者会使图片随按钮大小自动拉伸且不妨碍文字显示;后者则保持图片原始比例显示,此时设置的文字可能被遮挡。根据实际需求选择合适的方法。

关于UIButton,既可以采用setBackgroundImage 来设置底部图片,同时也可以采用  setImage方法;

两者还是有一定区别的;


首先setBackgroundImage,image会随着button的大小而改变,图片自动会拉伸来适应button的大小,这个时候任然可以设置button的title,image不会挡住title;


相反的的setImage,图片不会进行拉伸,原比例的显示在button上,此时再设置title,title将无法显示,因此可以根据需求选中方法;

/** * @file CalibEnterDialog.cpp * @brief Implement the logic of the Calib Dialog (AVM) * @author(xiao.zhen@kotei.com.cn) * @version 0.1 * @date 2025-07-31 * * @copyright Copyright (c) 2025 */ #include "WindowManager.h" #include "WindowProperties.h" /** * @brief Initializes a Calib window * @return true if initialization succeeded, false otherwise * @note Ensures the Creates all Calib window successfully * @see none */ bool WindowManager::initializeCalibEnterDialog() { KWidget *pwidget = nullptr; auto &window_property_table = WindowProperties::getInstance().getMutableCalibEnterDialogPropertyTable(); for (auto &iter : window_property_table) { auto &window_id = iter.first; auto &property = iter.second; switch (property.window_style) { case eWindowStyle::kGuiDialog : /* code */ m_calib_enter_dialog = std::make_shared<KDialog>(); m_calib_enter_dialog->setBackgroundImage(property.image_normal); pwidget = m_calib_enter_dialog.get(); break; case eWindowStyle::kGuiWidget : pwidget = new KWidget(m_calib_enter_dialog.get()); pwidget->setBackgroundImage(property.image_normal); pwidget->setEnabled(false); break; case eWindowStyle::kGuiToggleButton : pwidget = new KToggleButton(m_calib_enter_dialog.get()); dynamic_cast<KToggleButton*>(pwidget)->setImage(property.image_normal, property.image_selected); break; default: break; } pwidget->setWindowId(static_cast<uint32_t>(window_id)); pwidget->setDrawMode(property.draw_mode); pwidget->setGeometry(property.x, property.y, property.width, property.height); property.widget = pwidget; } m_dialogs_table.emplace_back(m_calib_enter_dialog); m_calib_enter_dialog->registerEvent(std::bind(&WindowManager::processCalibEnterEvent, this, std::placeholders::_1)); return true; } void WindowManager::processCalibEnterEvent(KGuiEvent *event) { KToggleButton* p_select_button = dynamic_cast<KToggleButton*>(event->getObject()); if (p_select_button==nullptr) { return; } eWindowId window_id = static_cast<eWindowId>(p_select_button->getWindowId()); switch (window_id) { case eWindowId::kAutoCalib : //openloading m_calib_waiting_dialog->exec(); m_window_dialogs.push_back(m_calib_waiting_dialog); m_calib_switch.emit(window_id); m_calib_enter_dialog->done(); removeDialogFromList(m_calib_enter_dialog); // m_calib_mask->show(); break; case eWindowId::kMauanlCalib : m_calib_switch.emit(window_id); m_calib_mask->hide(); break; case eWindowId::kCalibExit : m_calib_enter_dialog->done(); removeDialogFromList(m_calib_enter_dialog); m_calib_switch.emit(window_id); m_calib_mask->hide(); break; default: break; } } void WindowManager::registerCalibChange(std::function<void(const eWindowId&)> callback) { m_calib_switch.connect(callback); } void WindowManager::notifyAutoCalibResult(bool _result) { hideCalibWaitDialog(); if(_result) { //open success dialog m_calib_succ_dialog->exec(); m_window_dialogs.push_back(m_calib_succ_dialog); // m_popup_mask->show(); } else { //open failed dialog m_calib_fail_dialog->exec(); m_window_dialogs.push_back(m_calib_fail_dialog); // m_popup_mask->show(); } } void WindowManager::showCalibEnterDialog() { m_calib_enter_dialog->exec(); m_window_dialogs.push_back(m_calib_enter_dialog); m_calib_mask->show(); }结合代码写测试文档
最新发布
08-16
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值