diff --git a/APRSISClient.cpp b/APRSISClient.cpp index 14863530..cbf7b1cb 100644 --- a/APRSISClient.cpp +++ b/APRSISClient.cpp @@ -1,4 +1,5 @@ #include "APRSISClient.h" +#include #include @@ -179,8 +180,8 @@ QPair APRSISClient::grid2aprs(QString grid){ double aprsLon = iLon * 100 + iLonMin + (iLonSec / 60.0); return { - QString().sprintf("%07.2f%%1", aprsLat).arg(latDir), - QString().sprintf("%08.2f%%1", aprsLon).arg(lonDir) + QString("%1%2").arg(aprsLat, 7, 'f', 2, QChar('0')).arg(latDir), + QString("%1%2").arg(aprsLon, 8, 'f', 2, QChar('0')).arg(lonDir) }; } @@ -263,7 +264,7 @@ void APRSISClient::processQueue(bool disconnect){ } } - auto re = QRegExp("(full|unavailable|busy)"); + auto re = QRegularExpression("(full|unavailable|busy)"); auto line = QString(readLine()); if(line.toLower().indexOf(re) >= 0){ qDebug() << "APRSISClient Connection Busy:" << line; @@ -301,7 +302,7 @@ void APRSISClient::processQueue(bool disconnect){ } // random delay 25% of the time for throttling (a skip will add 60 seconds to the processing time) - if(m_skipPercent > 0 && qrand() % 100 <= int(m_skipPercent*100)){ + if(m_skipPercent > 0 && QRandomGenerator::global()->generate() % 100 <= (m_skipPercent*100)){ qDebug() << "APRSISClient Throttle: Skipping Frame"; delayed.enqueue(m_frameQueue.dequeue()); continue; diff --git a/Configuration.cpp b/Configuration.cpp index 8258f979..6d32179d 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -151,7 +151,7 @@ #include #include #include -#include +#include #include #include #include @@ -198,7 +198,7 @@ namespace int const combo_box_item_disabled (0); // QRegExp message_alphabet {"[- A-Za-z0-9+./?]*"}; - QRegExp message_alphabet {"[^\\x00-\\x1F]*"}; + QRegularExpression message_alphabet {"[^\\x00-\\x1F]*"}; // Magic numbers for file validation constexpr quint32 qrg_magic {0xadbccbdb}; @@ -363,7 +363,7 @@ public: { auto editor = new QLineEdit {parent}; editor->setFrame (false); - editor->setValidator (new QRegExpValidator {message_alphabet, editor}); + editor->setValidator (new QRegularExpressionValidator {message_alphabet, editor}); return editor; } }; @@ -983,16 +983,17 @@ void Configuration::transceiver_ptt (bool on) m_->transceiver_ptt (on); - auto cmd = ptt_command(); - if(!cmd.isEmpty()){ - auto p = new QProcess(this); - if(cmd.contains("%1")){ - cmd = cmd.arg(on ? "\"on\"" : "\"off\""); - } else { - cmd.append(" "); - cmd.append(on ? "\"on\"" : "\"off\""); + if (auto cmd = ptt_command(); + !cmd.isEmpty()) { + + if (!cmd.contains("%1")) cmd.append(" %1"); + + if (auto arguments = QProcess::splitCommand(cmd.arg(on ? "\"on\"" : "\"off\"")); + !arguments.isEmpty()) + { + QString program = arguments.takeFirst(); + QProcess::startDetached(program, arguments); } - p->startDetached(cmd); } } @@ -1037,7 +1038,7 @@ QString Configuration::my_grid() const } QSet Configuration::my_groups() const { - return QSet::fromList(m_->my_groups_); + return QSet(m_->my_groups_.begin(), m_->my_groups_.end()); } void Configuration::addGroup(QString const &group){ @@ -1051,39 +1052,39 @@ void Configuration::addGroup(QString const &group){ } QSet groups = my_groups(); groups.insert(group.trimmed()); - m_->my_groups_ = groups.toList(); + m_->my_groups_ = groups.values(); m_->write_settings(); } void Configuration::removeGroup(QString const &group){ QSet groups = my_groups(); groups.remove(group.trimmed()); - m_->my_groups_ = groups.toList(); + m_->my_groups_ = groups.values(); m_->write_settings(); } QSet Configuration::auto_whitelist() const { - return QSet::fromList(m_->auto_whitelist_); + return QSet(m_->auto_whitelist_.begin(), m_->auto_whitelist_.end()); } QSet Configuration::auto_blacklist() const { - return QSet::fromList(m_->auto_blacklist_); + return QSet(m_->auto_blacklist_.begin(), m_->auto_blacklist_.end()); } QSet Configuration::hb_blacklist() const { - return QSet::fromList(m_->hb_blacklist_); + return QSet(m_->hb_blacklist_.begin(), m_->hb_blacklist_.end()); } QSet Configuration::spot_blacklist() const { - return QSet::fromList(m_->spot_blacklist_); + return QSet(m_->spot_blacklist_.begin(), m_->spot_blacklist_.end()); } QSet Configuration::primary_highlight_words() const { - return QSet::fromList(m_->primary_highlight_words_); + return QSet(m_->primary_highlight_words_.begin(), m_->primary_highlight_words_.end()); } QSet Configuration::secondary_highlight_words() const { - return QSet::fromList(m_->secondary_highlight_words_); + return QSet(m_->secondary_highlight_words_.begin(), m_->secondary_highlight_words_.end()); } QString Configuration::eot() const { @@ -1312,13 +1313,13 @@ Configuration::impl::impl (Configuration * self, QDir const& temp_directory, // ui_->callsign_line_edit->setValidator (new CallsignValidator {this}); ui_->grid_line_edit->setValidator (new MaidenheadLocatorValidator {this, MaidenheadLocatorValidator::Length::doubleextended}); - ui_->add_macro_line_edit->setValidator (new QRegExpValidator {message_alphabet, this}); - ui_->info_message_line_edit->setValidator (new QRegExpValidator {message_alphabet, this}); - ui_->reply_message_line_edit->setValidator (new QRegExpValidator {message_alphabet, this}); - ui_->cq_message_line_edit->setValidator (new QRegExpValidator {message_alphabet, this}); - ui_->hb_message_line_edit->setValidator (new QRegExpValidator {message_alphabet, this}); - ui_->status_message_line_edit->setValidator (new QRegExpValidator {message_alphabet, this}); - ui_->groups_line_edit->setValidator (new QRegExpValidator {message_alphabet, this}); + ui_->add_macro_line_edit->setValidator (new QRegularExpressionValidator {message_alphabet, this}); + ui_->info_message_line_edit->setValidator (new QRegularExpressionValidator {message_alphabet, this}); + ui_->reply_message_line_edit->setValidator (new QRegularExpressionValidator {message_alphabet, this}); + ui_->cq_message_line_edit->setValidator (new QRegularExpressionValidator {message_alphabet, this}); + ui_->hb_message_line_edit->setValidator (new QRegularExpressionValidator {message_alphabet, this}); + ui_->status_message_line_edit->setValidator (new QRegularExpressionValidator {message_alphabet, this}); + ui_->groups_line_edit->setValidator (new QRegularExpressionValidator {message_alphabet, this}); setUppercase(ui_->callsign_line_edit); setUppercase(ui_->grid_line_edit); @@ -1910,8 +1911,8 @@ void Configuration::impl::read_settings () txDelay_ = settings_->value ("TxDelay",0.2).toDouble(); aggressive_ = settings_->value ("Aggressive", 0).toInt (); RxBandwidth_ = settings_->value ("RxBandwidth", 2500).toInt (); - save_directory_ = settings_->value ("SaveDir", default_save_directory_.absolutePath ()).toString (); - azel_directory_ = settings_->value ("AzElDir", default_azel_directory_.absolutePath ()).toString (); + save_directory_.setPath(settings_->value ("SaveDir", default_save_directory_.absolutePath ()).toString ()); + azel_directory_.setPath(settings_->value ("AzElDir", default_azel_directory_.absolutePath ()).toString ()); { // @@ -2888,8 +2889,8 @@ void Configuration::impl::accept () heartbeat_ = ui_->heartbeat_spin_box->value (); watchdog_ = ui_->tx_watchdog_spin_box->value (); data_mode_ = static_cast (ui_->TX_mode_button_group->checkedId ()); - save_directory_ = ui_->save_path_display_label->text (); - azel_directory_ = ui_->azel_path_display_label->text (); + save_directory_.setPath(ui_->save_path_display_label->text ()); + azel_directory_.setPath(ui_->azel_path_display_label->text ()); enable_VHF_features_ = ui_->enable_VHF_features_check_box->isChecked (); decode_at_52s_ = ui_->decode_at_52s_check_box->isChecked (); single_decode_ = ui_->single_decode_check_box->isChecked (); @@ -3422,7 +3423,7 @@ void Configuration::impl::delete_selected_macros (QModelIndexList selected_rows) { // sort in reverse row order so that we can delete without changing // indices underneath us - qSort (selected_rows.begin (), selected_rows.end (), [] (QModelIndex const& lhs, QModelIndex const& rhs) + std::sort (selected_rows.begin (), selected_rows.end (), [] (QModelIndex const& lhs, QModelIndex const& rhs) { return rhs.row () < lhs.row (); // reverse row ordering }); diff --git a/Decoder.cpp b/Decoder.cpp index 9d107994..2640018b 100644 --- a/Decoder.cpp +++ b/Decoder.cpp @@ -136,7 +136,7 @@ void Worker::start(QString path, QStringList args){ } }); - connect(proc, static_cast (&QProcess::error), + connect(proc, &QProcess::errorOccurred, [this, proc] (QProcess::ProcessError errorCode) { emit error(int(errorCode), proc->errorString()); }); diff --git a/DisplayManual.cpp b/DisplayManual.cpp index 155c2200..c5b9021b 100644 --- a/DisplayManual.cpp +++ b/DisplayManual.cpp @@ -49,10 +49,12 @@ public: void display (QUrl const& url, QString const& name_we) { +#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) if (QNetworkAccessManager::Accessible != qnam_->networkAccessible ()) { // try and recover network access for QNAM qnam_->setNetworkAccessible (QNetworkAccessManager::Accessible); } +#endif // try and find a localized manual auto lang = QLocale::system ().name (); diff --git a/FrequencyList.cpp b/FrequencyList.cpp index 7cc5a027..2575db4d 100644 --- a/FrequencyList.cpp +++ b/FrequencyList.cpp @@ -230,7 +230,7 @@ bool FrequencyList_v2::removeDisjointRows (QModelIndexList rows) } // reverse sort by row - qSort (rows.begin (), rows.end (), row_is_higher); + std::sort (rows.begin (), rows.end (), row_is_higher); Q_FOREACH (auto index, rows) { if (result && !m_->removeRow (index.row ())) diff --git a/GetUserId.cpp b/GetUserId.cpp index 238c3b5a..eb7b4f2b 100644 --- a/GetUserId.cpp +++ b/GetUserId.cpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include #include @@ -28,7 +28,7 @@ public: { setWindowTitle (QApplication::applicationName () + " - " + tr ("Callsign")); - callsign_.setValidator (new QRegExpValidator {QRegExp {"[A-Za-z0-9]+"}, this}); + callsign_.setValidator (new QRegularExpressionValidator {QRegularExpression {"[A-Za-z0-9]+"}, this}); auto form_layout = new QFormLayout (); form_layout->addRow ("&Callsign:", &callsign_); diff --git a/HRDTransceiver.cpp b/HRDTransceiver.cpp index 3b9f90e2..c12361c3 100644 --- a/HRDTransceiver.cpp +++ b/HRDTransceiver.cpp @@ -2,7 +2,7 @@ #include #include -#include +#include #include #include #include @@ -34,7 +34,7 @@ struct HRDMessage HRDMessage * storage (reinterpret_cast (new char[size])); storage->size_ = size ; ushort const * pl (payload.utf16 ()); - qCopy (pl, pl + payload.size () + 1, storage->payload_); // copy terminator too + std::copy (pl, pl + payload.size () + 1, storage->payload_); // copy terminator too storage->magic_1_ = magic_1_value_; storage->magic_2_ = magic_2_value_; storage->checksum_ = 0; @@ -164,7 +164,7 @@ int HRDTransceiver::do_start () HRD_info << "Id: " << id << "\n"; HRD_info << "Version: " << version << "\n"; - auto radios = send_command ("get radios", false, false).trimmed ().split (',', QString::SkipEmptyParts); + auto radios = send_command ("get radios", false, false).trimmed ().split (',', Qt::SkipEmptyParts); if (radios.isEmpty ()) { TRACE_CAT ("HRDTransceiver", "no rig found"); @@ -175,7 +175,7 @@ int HRDTransceiver::do_start () Q_FOREACH (auto const& radio, radios) { HRD_info << "\t" << radio << "\n"; - auto entries = radio.trimmed ().split (':', QString::SkipEmptyParts); + auto entries = radio.trimmed ().split (':', Qt::SkipEmptyParts); radios_.push_back (std::forward_as_tuple (entries[0].toUInt (), entries[1])); } @@ -199,11 +199,11 @@ int HRDTransceiver::do_start () HRD_info << "VFO count: " << vfo_count_ << "\n"; TRACE_CAT ("HRDTransceiver", "vfo count:" << vfo_count_); - buttons_ = send_command ("get buttons").trimmed ().split (',', QString::SkipEmptyParts).replaceInStrings (" ", "~"); + buttons_ = send_command ("get buttons").trimmed ().split (',', Qt::SkipEmptyParts).replaceInStrings (" ", "~"); TRACE_CAT ("HRDTransceiver", "HRD Buttons: " << buttons_); HRD_info << "Buttons: {" << buttons_.join (", ") << "}\n"; - dropdown_names_ = send_command ("get dropdowns").trimmed ().split (',', QString::SkipEmptyParts); + dropdown_names_ = send_command ("get dropdowns").trimmed ().split (',', Qt::SkipEmptyParts); TRACE_CAT ("HRDTransceiver", "Dropdowns:"); HRD_info << "Dropdowns:\n"; Q_FOREACH (auto const& dd, dropdown_names_) @@ -214,45 +214,45 @@ int HRDTransceiver::do_start () dropdowns_[dd] = selections; } - slider_names_ = send_command ("get sliders").trimmed ().split (',', QString::SkipEmptyParts).replaceInStrings (" ", "~"); + slider_names_ = send_command ("get sliders").trimmed ().split (',', Qt::SkipEmptyParts).replaceInStrings (" ", "~"); TRACE_CAT ("HRDTransceiver", "Sliders:-"); HRD_info << "Sliders:\n"; Q_FOREACH (auto const& s, slider_names_) { - auto range = send_command ("get slider-range " + current_radio_name + " " + s).trimmed ().split (',', QString::SkipEmptyParts); + auto range = send_command ("get slider-range " + current_radio_name + " " + s).trimmed ().split (',', Qt::SkipEmptyParts); TRACE_CAT ("HRDTransceiver", "\t" << s << ": {" << range.join (", ") << "}"); HRD_info << "\t" << s << ": {" << range.join (", ") << "}\n"; sliders_[s] = range; } // set RX VFO - rx_A_button_ = find_button (QRegExp ("^(RX~A)$")); - rx_B_button_ = find_button (QRegExp ("^(RX~B)$")); + rx_A_button_ = find_button (QRegularExpression ("^(RX~A)$")); + rx_B_button_ = find_button (QRegularExpression ("^(RX~B)$")); // select VFO (sometime set as well) - vfo_A_button_ = find_button (QRegExp ("^(VFO~A|Main)$")); - vfo_B_button_ = find_button (QRegExp ("^(VFO~B|Sub)$")); + vfo_A_button_ = find_button (QRegularExpression ("^(VFO~A|Main)$")); + vfo_B_button_ = find_button (QRegularExpression ("^(VFO~B|Sub)$")); - vfo_toggle_button_ = find_button (QRegExp ("^(A~/~B)$")); + vfo_toggle_button_ = find_button (QRegularExpression ("^(A~/~B)$")); - split_mode_button_ = find_button (QRegExp ("^(Spl~On|Spl_On|Split|Split~On)$")); - split_off_button_ = find_button (QRegExp ("^(Spl~Off|Spl_Off|Split~Off)$")); + split_mode_button_ = find_button (QRegularExpression ("^(Spl~On|Spl_On|Split|Split~On)$")); + split_off_button_ = find_button (QRegularExpression ("^(Spl~Off|Spl_Off|Split~Off)$")); - if ((split_mode_dropdown_ = find_dropdown (QRegExp ("^(Split)$"))) >= 0) + if ((split_mode_dropdown_ = find_dropdown (QRegularExpression ("^(Split)$"))) >= 0) { - split_mode_dropdown_selection_on_ = find_dropdown_selection (split_mode_dropdown_, QRegExp ("^(On)$")); - split_mode_dropdown_selection_off_ = find_dropdown_selection (split_mode_dropdown_, QRegExp ("^(Off)$")); + split_mode_dropdown_selection_on_ = find_dropdown_selection (split_mode_dropdown_, QRegularExpression ("^(On)$")); + split_mode_dropdown_selection_off_ = find_dropdown_selection (split_mode_dropdown_, QRegularExpression ("^(Off)$")); } - else if ((receiver_dropdown_ = find_dropdown (QRegExp ("^Receiver$"))) >= 0) + else if ((receiver_dropdown_ = find_dropdown (QRegularExpression ("^Receiver$"))) >= 0) { - rx_A_selection_ = find_dropdown_selection (receiver_dropdown_, QRegExp ("^(RX / Off)$")); - rx_B_selection_ = find_dropdown_selection (receiver_dropdown_, QRegExp ("^(Mute / RX)$")); + rx_A_selection_ = find_dropdown_selection (receiver_dropdown_, QRegularExpression ("^(RX / Off)$")); + rx_B_selection_ = find_dropdown_selection (receiver_dropdown_, QRegularExpression ("^(Mute / RX)$")); } - tx_A_button_ = find_button (QRegExp ("^(TX~main|TX~-~A|TX~A)$")); - tx_B_button_ = find_button (QRegExp ("^(TX~sub|TX~-~B|TX~B)$")); + tx_A_button_ = find_button (QRegularExpression ("^(TX~main|TX~-~A|TX~A)$")); + tx_B_button_ = find_button (QRegularExpression ("^(TX~sub|TX~-~B|TX~B)$")); - if ((mode_A_dropdown_ = find_dropdown (QRegExp ("^(Main Mode|Mode|Mode A)$"))) >= 0) + if ((mode_A_dropdown_ = find_dropdown (QRegularExpression ("^(Main Mode|Mode|Mode A)$"))) >= 0) { map_modes (mode_A_dropdown_, &mode_A_map_); } @@ -261,7 +261,7 @@ int HRDTransceiver::do_start () Q_ASSERT (mode_A_dropdown_ <= 0); } - if ((mode_B_dropdown_ = find_dropdown (QRegExp ("^(Sub Mode|Mode B)$"))) >= 0) + if ((mode_B_dropdown_ = find_dropdown (QRegularExpression ("^(Sub Mode|Mode B)$"))) >= 0) { map_modes (mode_B_dropdown_, &mode_B_map_); } @@ -271,11 +271,11 @@ int HRDTransceiver::do_start () // so we must filter by rig name as well if (current_radio_name.startsWith ("IC")) // works with Icom transceivers { - data_mode_toggle_button_ = find_button (QRegExp ("^(Data)$")); + data_mode_toggle_button_ = find_button (QRegularExpression ("^(Data)$")); } - data_mode_on_button_ = find_button (QRegExp ("^(DATA-ON\\(mid\\))$")); - data_mode_off_button_ = find_button (QRegExp ("^(DATA-OFF)$")); + data_mode_on_button_ = find_button (QRegularExpression ("^(DATA-ON\\(mid\\))$")); + data_mode_off_button_ = find_button (QRegularExpression ("^(DATA-OFF)$")); // Some newer Icoms have a Data drop down with (Off,On,D1,D2,D3) // Some newer Icoms have a Data drop down with (Off,D1,D2,D3) @@ -283,14 +283,14 @@ int HRDTransceiver::do_start () // (Off,,D1-FIL1,D1-FIL2,D1-FIL3) the missing value counts as an // index value - I think it is a drop down separator line - this // appears to be an HRD defect and we cannot work around it - if ((data_mode_dropdown_ = find_dropdown (QRegExp ("^(Data)$"))) >= 0) + if ((data_mode_dropdown_ = find_dropdown (QRegularExpression ("^(Data)$"))) >= 0) { - data_mode_dropdown_selection_on_ = find_dropdown_selection (data_mode_dropdown_, QRegExp ("^(On|Data1|D1|D1-FIL1)$")); - data_mode_dropdown_selection_off_ = find_dropdown_selection (data_mode_dropdown_, QRegExp ("^(Off)$")); + data_mode_dropdown_selection_on_ = find_dropdown_selection (data_mode_dropdown_, QRegularExpression ("^(On|Data1|D1|D1-FIL1)$")); + data_mode_dropdown_selection_off_ = find_dropdown_selection (data_mode_dropdown_, QRegularExpression ("^(Off)$")); } - ptt_button_ = find_button (QRegExp ("^(TX)$")); - alt_ptt_button_ = find_button (QRegExp ("^(TX~Alt|TX~Data)$")); + ptt_button_ = find_button (QRegularExpression ("^(TX)$")); + alt_ptt_button_ = find_button (QRegularExpression ("^(TX~Alt|TX~Data)$")); if (vfo_count_ == 1 && ((vfo_B_button_ >= 0 && vfo_A_button_ >= 0) || vfo_toggle_button_ >= 0)) { @@ -357,17 +357,17 @@ void HRDTransceiver::do_stop () TRACE_CAT ("HRDTransceiver", "stopped" << state () << "reversed" << reversed_); } -int HRDTransceiver::find_button (QRegExp const& re) const +int HRDTransceiver::find_button (QRegularExpression const& re) const { return buttons_.indexOf (re); } -int HRDTransceiver::find_dropdown (QRegExp const& re) const +int HRDTransceiver::find_dropdown (QRegularExpression const& re) const { return dropdown_names_.indexOf (re); } -std::vector HRDTransceiver::find_dropdown_selection (int dropdown, QRegExp const& re) const +std::vector HRDTransceiver::find_dropdown_selection (int dropdown, QRegularExpression const& re) const { std::vector indices; // this will always contain at least a // -1 @@ -389,17 +389,17 @@ std::vector HRDTransceiver::find_dropdown_selection (int dropdown, QRegExp void HRDTransceiver::map_modes (int dropdown, ModeMap *map) { // order matters here (both in the map and in the regexps) - map->push_back (std::forward_as_tuple (CW, find_dropdown_selection (dropdown, QRegExp ("^(CW|CW\\(N\\))|CWL$")))); - map->push_back (std::forward_as_tuple (CW_R, find_dropdown_selection (dropdown, QRegExp ("^(CW-R|CW-R\\(N\\)|CW|CWU)$")))); - map->push_back (std::forward_as_tuple (LSB, find_dropdown_selection (dropdown, QRegExp ("^(LSB\\(N\\)|LSB)$")))); - map->push_back (std::forward_as_tuple (USB, find_dropdown_selection (dropdown, QRegExp ("^(USB\\(N\\)|USB)$")))); - map->push_back (std::forward_as_tuple (DIG_U, find_dropdown_selection (dropdown, QRegExp ("^(DIG|DIGU|DATA-U|PKT-U|DATA|USER-U|USB)$")))); - map->push_back (std::forward_as_tuple (DIG_L, find_dropdown_selection (dropdown, QRegExp ("^(DIG|DIGL|DATA-L|PKT-L|DATA-R|USER-L|LSB)$")))); - map->push_back (std::forward_as_tuple (FSK, find_dropdown_selection (dropdown, QRegExp ("^(DIG|FSK|RTTY|RTTY-LSB)$")))); - map->push_back (std::forward_as_tuple (FSK_R, find_dropdown_selection (dropdown, QRegExp ("^(DIG|FSK-R|RTTY-R|RTTY|RTTY-USB)$")))); - map->push_back (std::forward_as_tuple (AM, find_dropdown_selection (dropdown, QRegExp ("^(AM|DSB|SAM|DRM)$")))); - map->push_back (std::forward_as_tuple (FM, find_dropdown_selection (dropdown, QRegExp ("^(FM|FM\\(N\\)|FM-N|WFM)$")))); - map->push_back (std::forward_as_tuple (DIG_FM, find_dropdown_selection (dropdown, QRegExp ("^(PKT-FM|PKT|FM)$")))); + map->push_back (std::forward_as_tuple (CW, find_dropdown_selection (dropdown, QRegularExpression ("^(CW|CW\\(N\\))|CWL$")))); + map->push_back (std::forward_as_tuple (CW_R, find_dropdown_selection (dropdown, QRegularExpression ("^(CW-R|CW-R\\(N\\)|CW|CWU)$")))); + map->push_back (std::forward_as_tuple (LSB, find_dropdown_selection (dropdown, QRegularExpression ("^(LSB\\(N\\)|LSB)$")))); + map->push_back (std::forward_as_tuple (USB, find_dropdown_selection (dropdown, QRegularExpression ("^(USB\\(N\\)|USB)$")))); + map->push_back (std::forward_as_tuple (DIG_U, find_dropdown_selection (dropdown, QRegularExpression ("^(DIG|DIGU|DATA-U|PKT-U|DATA|USER-U|USB)$")))); + map->push_back (std::forward_as_tuple (DIG_L, find_dropdown_selection (dropdown, QRegularExpression ("^(DIG|DIGL|DATA-L|PKT-L|DATA-R|USER-L|LSB)$")))); + map->push_back (std::forward_as_tuple (FSK, find_dropdown_selection (dropdown, QRegularExpression ("^(DIG|FSK|RTTY|RTTY-LSB)$")))); + map->push_back (std::forward_as_tuple (FSK_R, find_dropdown_selection (dropdown, QRegularExpression ("^(DIG|FSK-R|RTTY-R|RTTY|RTTY-USB)$")))); + map->push_back (std::forward_as_tuple (AM, find_dropdown_selection (dropdown, QRegularExpression ("^(AM|DSB|SAM|DRM)$")))); + map->push_back (std::forward_as_tuple (FM, find_dropdown_selection (dropdown, QRegularExpression ("^(FM|FM\\(N\\)|FM-N|WFM)$")))); + map->push_back (std::forward_as_tuple (DIG_FM, find_dropdown_selection (dropdown, QRegularExpression ("^(PKT-FM|PKT|FM)$")))); #if WSJT_TRACE_CAT TRACE_CAT ("HRDTransceiver", "for dropdown" << dropdown_names_[dropdown]); @@ -598,7 +598,7 @@ void HRDTransceiver::do_frequency (Frequency f, MODE m, bool /*no_ignore*/) auto fo_string = QString::number (f); if (vfo_count_ > 1 && reversed_) { - auto frequencies = send_command ("get frequencies").trimmed ().split ('-', QString::SkipEmptyParts); + auto frequencies = send_command ("get frequencies").trimmed ().split ('-', Qt::SkipEmptyParts); send_simple_command ("set frequencies-hz " + QString::number (frequencies[0].toUInt ()) + ' ' + fo_string); } else @@ -684,14 +684,14 @@ void HRDTransceiver::do_tx_frequency (Frequency tx, MODE mode, bool /*no_ignore* { Q_ASSERT (vfo_count_ > 1); - auto frequencies = send_command ("get frequencies").trimmed ().split ('-', QString::SkipEmptyParts); + auto frequencies = send_command ("get frequencies").trimmed ().split ('-', Qt::SkipEmptyParts); send_simple_command ("set frequencies-hz " + fo_string + ' ' + QString::number (frequencies[1].toUInt ())); } else { if (vfo_count_ > 1) { - auto frequencies = send_command ("get frequencies").trimmed ().split ('-', QString::SkipEmptyParts); + auto frequencies = send_command ("get frequencies").trimmed ().split ('-', Qt::SkipEmptyParts); send_simple_command ("set frequencies-hz " + QString::number (frequencies[0].toUInt ()) + ' ' + fo_string); } else if ((vfo_B_button_ >= 0 && vfo_A_button_ >= 0) || vfo_toggle_button_ >= 0) @@ -983,7 +983,7 @@ void HRDTransceiver::poll () if (vfo_count_ > 1) { - auto frequencies = send_command ("get frequencies", quiet).trimmed ().split ('-', QString::SkipEmptyParts); + auto frequencies = send_command ("get frequencies", quiet).trimmed ().split ('-', Qt::SkipEmptyParts); update_rx_frequency (frequencies[reversed_ ? 1 : 0].toUInt ()); update_other_frequency (frequencies[reversed_ ? 0 : 1].toUInt ()); } diff --git a/HRDTransceiver.hpp b/HRDTransceiver.hpp index e17134d5..ce0c9650 100644 --- a/HRDTransceiver.hpp +++ b/HRDTransceiver.hpp @@ -12,7 +12,7 @@ #include "TransceiverFactory.hpp" #include "PollingTransceiver.hpp" -class QRegExp; +class QRegularExpression; class QTcpSocket; class QByteArray; @@ -55,9 +55,9 @@ private: QByteArray read_reply (QString const& command); void send_simple_command (QString const&, bool no_debug = false); bool write_to_port (char const *, qint64 length); - int find_button (QRegExp const&) const; - int find_dropdown (QRegExp const&) const; - std::vector find_dropdown_selection (int dropdown, QRegExp const&) const; + int find_button (QRegularExpression const&) const; + int find_dropdown (QRegularExpression const&) const; + std::vector find_dropdown_selection (int dropdown, QRegularExpression const&) const; int get_dropdown (int, bool no_debug = false); void set_dropdown (int, int); void set_button (int button_index, bool checked = true); diff --git a/LiveFrequencyValidator.cpp b/LiveFrequencyValidator.cpp index 35aaf57c..db950722 100644 --- a/LiveFrequencyValidator.cpp +++ b/LiveFrequencyValidator.cpp @@ -15,8 +15,8 @@ LiveFrequencyValidator::LiveFrequencyValidator (QComboBox * combo_box , FrequencyList_v2 const * frequencies , Frequency const * nominal_frequency , QWidget * parent) - : QRegExpValidator { - QRegExp { // frequency in MHz or band + : QRegularExpressionValidator { + QRegularExpression { // frequency in MHz or band bands->data (QModelIndex {}).toString () // out of band string + QString {R"(|((\d{0,6}(\)"} // or up to 6 digits + QLocale {}.decimalPoint () // (followed by decimal separator @@ -38,7 +38,7 @@ LiveFrequencyValidator::LiveFrequencyValidator (QComboBox * combo_box auto LiveFrequencyValidator::validate (QString& input, int& pos) const -> State { - auto state = QRegExpValidator::validate (input, pos); + auto state = QRegularExpressionValidator::validate (input, pos); // by never being Acceptable we force fixup calls on ENTER or // losing focus return Acceptable == state ? Intermediate : state; @@ -46,7 +46,7 @@ auto LiveFrequencyValidator::validate (QString& input, int& pos) const -> State void LiveFrequencyValidator::fixup (QString& input) const { - QRegExpValidator::fixup (input); + QRegularExpressionValidator::fixup (input); if (!bands_->oob ().startsWith (input)) { if (input.contains ('m', Qt::CaseInsensitive)) diff --git a/LiveFrequencyValidator.hpp b/LiveFrequencyValidator.hpp index 823f8f74..a6858881 100644 --- a/LiveFrequencyValidator.hpp +++ b/LiveFrequencyValidator.hpp @@ -2,7 +2,7 @@ #define LIVE_FREQUENCY_VALIDATOR_HPP__ #include -#include +#include #include "Radio.hpp" @@ -26,7 +26,7 @@ class QWidget; // the supplied QAbstractItemModel. // class LiveFrequencyValidator final - : public QRegExpValidator + : public QRegularExpressionValidator { Q_OBJECT; diff --git a/MessageClient.cpp b/MessageClient.cpp index b0dc61aa..4121d96a 100644 --- a/MessageClient.cpp +++ b/MessageClient.cpp @@ -243,7 +243,7 @@ MessageClient::MessageClient (QString const& id, QString const& version, QString : QObject {self} , m_ {id, version, revision, server_port, this} { - connect (&*m_, static_cast (&impl::error) + connect (&*m_, &impl::errorOccurred , [this] (impl::SocketError e) { #if defined (Q_OS_WIN) && QT_VERSION >= 0x050500 diff --git a/Modulator.cpp b/Modulator.cpp index 23670993..77abeafe 100644 --- a/Modulator.cpp +++ b/Modulator.cpp @@ -293,8 +293,8 @@ qint64 Modulator::readData (char * data, qint64 maxSize) int j=m_ic/480; if(m_fSpread>0.0 and j!=m_j0) { - float x1=(float)qrand()/RAND_MAX; - float x2=(float)qrand()/RAND_MAX; + float x1=(float)QRandomGenerator::global()->generate()/RAND_MAX; + float x2=(float)QRandomGenerator::global()->generate()/RAND_MAX; toneFrequency = m_toneFrequency0 + 0.5*m_fSpread*(x1+x2-1.0); m_dphi = m_twoPi * toneFrequency / m_frameRate; m_j0=j; diff --git a/SelfDestructMessageBox.h b/SelfDestructMessageBox.h index cea3dd86..a52b1ad8 100644 --- a/SelfDestructMessageBox.h +++ b/SelfDestructMessageBox.h @@ -20,7 +20,7 @@ public: QMessageBox::StandardButton defaultButton = QMessageBox::Ok, bool show_countdown = false, QWidget* parent = nullptr, - Qt::WindowFlags flags = 0); + Qt::WindowFlags flags = Qt::WindowFlags()); void showEvent(QShowEvent* event) override; diff --git a/StationList.cpp b/StationList.cpp index 28a7617d..2adeffc5 100644 --- a/StationList.cpp +++ b/StationList.cpp @@ -168,7 +168,7 @@ bool StationList::removeDisjointRows (QModelIndexList rows) } // reverse sort by row - qSort (rows.begin (), rows.end (), row_is_higher); + std::sort (rows.begin (), rows.end (), row_is_higher); Q_FOREACH (auto index, rows) { if (result && !m_->removeRow (index.row ())) diff --git a/TraceFile.cpp b/TraceFile.cpp index 032b8875..33c4dd47 100644 --- a/TraceFile.cpp +++ b/TraceFile.cpp @@ -108,7 +108,7 @@ void TraceFile::impl::message_handler (QtMsgType type, QMessageLogContext const& *current_stream_ << QDateTime::currentDateTimeUtc ().toString ("yyyy-MM-ddTHH:mm:ss.zzzZ") << '(' << context.file << ':' << context.line /* << ", " << context.function */ << ')' - << severity << ": " << msg.trimmed () << endl; + << severity << ": " << msg.trimmed () << Qt::endl; } if (QtFatalMsg == type) diff --git a/WFPalette.cpp b/WFPalette.cpp index 1dd65fd2..6ce6d55a 100644 --- a/WFPalette.cpp +++ b/WFPalette.cpp @@ -242,7 +242,7 @@ namespace QTextStream stream {&file}; Q_FOREACH (auto colour, colours_) { - stream << colour.red () << ';' << colour.green () << ';' << colour.blue () << endl; + stream << colour.red () << ';' << colour.green () << ';' << colour.blue () << Qt::endl; } } else diff --git a/decodedtext.cpp b/decodedtext.cpp index f2e8e0a8..4178f939 100644 --- a/decodedtext.cpp +++ b/decodedtext.cpp @@ -294,7 +294,7 @@ QStringList DecodedText::messageWords () const return words_re.match (message_).capturedTexts (); } // simple word split for free text messages - auto words = message_.split (' ', QString::SkipEmptyParts); + auto words = message_.split (' ', Qt::SkipEmptyParts); // add whole message as item 0 to mimic RE capture list words.prepend (message_); return words; @@ -358,7 +358,7 @@ bool DecodedText::report(QString const& myBaseCall, QString const& dxBaseCall, / { if (message_.size () < 1) return false; - QStringList const& w = message_.split(" ",QString::SkipEmptyParts); + QStringList const& w = message_.split(" ",Qt::SkipEmptyParts); if (w.size () && is_standard_ && (w[0] == myBaseCall || w[0].endsWith ("/" + myBaseCall) @@ -434,8 +434,7 @@ QString DecodedText::report() const // returns a string of the SNR field with a if (sr > 49) sr = 49; - QString rpt; - rpt.sprintf("%d",abs(sr)); + QString rpt = QString("%1").arg(abs(sr)); if (sr > 9) rpt = "+" + rpt; else diff --git a/displaytext.cpp b/displaytext.cpp index d1458191..3b943599 100644 --- a/displaytext.cpp +++ b/displaytext.cpp @@ -173,7 +173,7 @@ QString DisplayText::appendDXCCWorkedB4(QString message, QString const& callsign call=call.mid(0,i0); } if(call.length()<3) return message; - if(!call.contains(QRegExp("[0-9]|[A-Z]"))) return message; + if(!call.contains(QRegularExpression("[0-9]|[A-Z]"))) return message; logBook.match(/*in*/call,/*out*/countryName,callWorkedBefore,countryWorkedBefore); message = message.trimmed (); @@ -286,8 +286,7 @@ void DisplayText::displayTransmittedText(QString text, QString modeTx, qint32 tx if(modeTx=="JT4") t1=" $ "; if(modeTx=="JT65") t1=" # "; if(modeTx=="MSK144") t1=" & "; - QString t2; - t2.sprintf("%4d",txFreq); + QString t2 = QString("%1").arg(txFreq, 4); QString t; if(bFastMode or modeTx=="FT8") { t = DriftingDateTime::currentDateTimeUtc().toString("hhmmss") + \ diff --git a/getfile.cpp b/getfile.cpp index ed227dd3..212d1a1e 100644 --- a/getfile.cpp +++ b/getfile.cpp @@ -1,5 +1,6 @@ #include "getfile.h" #include +#include #include #include #include @@ -182,8 +183,8 @@ float gran() * that are inside the unit circle */ do { - v1 = 2.0 * (float)qrand() / RAND_MAX - 1; - v2 = 2.0 * (float)qrand() / RAND_MAX - 1; + v1 = 2.0 * (float)QRandomGenerator::global()->generate() / RAND_MAX - 1; + v2 = 2.0 * (float)QRandomGenerator::global()->generate() / RAND_MAX - 1; rsq = v1*v1 + v2*v2; } while(rsq >= 1.0 || rsq == 0.0); fac = sqrt(-2.0*log(rsq)/rsq); diff --git a/jsc.cpp b/jsc.cpp index 683fc811..cc2e1574 100644 --- a/jsc.cpp +++ b/jsc.cpp @@ -58,7 +58,7 @@ QList JSC::compress(QString text){ QString space(" "); - QStringList words = text.split(" ", QString::KeepEmptyParts); + QStringList words = text.split(" ", Qt::KeepEmptyParts); for(int i = 0, len = words.length(); i < len; i++){ QString w = words[i]; diff --git a/logbook/adif.cpp b/logbook/adif.cpp index 234901c3..bf3c6412 100644 --- a/logbook/adif.cpp +++ b/logbook/adif.cpp @@ -390,9 +390,9 @@ bool ADIF::addQSOToFile(QByteArray const& ADIF_record) { QTextStream out(&f2); if (f2.size()==0) - out << "JS8Call ADIF Export" << endl; // new file + out << "JS8Call ADIF Export" << Qt::endl; // new file - out << ADIF_record << " " << endl; + out << ADIF_record << " " << Qt::endl; out.flush(); flushFileBuffer(f2); f2.close(); diff --git a/logqso.cpp b/logqso.cpp index bc626da4..d2656ed3 100644 --- a/logqso.cpp +++ b/logqso.cpp @@ -87,8 +87,6 @@ void LogQSO::createAdditionalField(QString key, QString value){ c->insertItems(0, ADIF_FIELDS); c->insertItem(0, ""); c->setEditable(true); - c->setAutoCompletion(true); - c->setAutoCompletionCaseSensitivity(Qt::CaseInsensitive); c->view()->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); connect(c, &QComboBox::currentTextChanged, this, [this, l](const QString &text){ l->setProperty("fieldKey", QVariant(text)); @@ -316,7 +314,7 @@ void LogQSO::accept() } QTextStream out(&f); - out << logEntryItems.join(",") << endl; + out << logEntryItems.join(",") << Qt::endl; out.flush(); flushFileBuffer(f); f.close(); diff --git a/mainwindow.cpp b/mainwindow.cpp index 66c4bc69..b90963ea 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -8,8 +8,7 @@ #include #include #include -#include -#include +#include #include #include #include @@ -134,7 +133,7 @@ namespace { Radio::Frequency constexpr default_frequency {14078000}; - QRegExp message_alphabet {"[^\\x00-\\x1F]*"}; // base alphabet supported by JS8CALL + QRegularExpression message_alphabet {"[^\\x00-\\x1F]*"}; // base alphabet supported by JS8CALL // grid exact match excluding RR73 QRegularExpression grid_regexp {"\\A(?![Rr]{2}73)[A-Ra-r]{2}[0-9]{2}([A-Xa-x]{2}){0,1}\\z"}; @@ -735,15 +734,15 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, , QMessageBox::ActionRole); // set up message text validators - ui->tx1->setValidator (new QRegExpValidator {message_alphabet, this}); - ui->tx2->setValidator (new QRegExpValidator {message_alphabet, this}); - ui->tx3->setValidator (new QRegExpValidator {message_alphabet, this}); - ui->tx4->setValidator (new QRegExpValidator {message_alphabet, this}); - ui->tx5->setValidator (new QRegExpValidator {message_alphabet, this}); - ui->tx6->setValidator (new QRegExpValidator {message_alphabet, this}); - ui->freeTextMsg->setValidator (new QRegExpValidator {message_alphabet, this}); - ui->nextFreeTextMsg->setValidator (new QRegExpValidator {message_alphabet, this}); - //ui->extFreeTextMsg->setValidator (new QRegExpValidator {message_alphabet, this}); + ui->tx1->setValidator (new QRegularExpressionValidator {message_alphabet, this}); + ui->tx2->setValidator (new QRegularExpressionValidator {message_alphabet, this}); + ui->tx3->setValidator (new QRegularExpressionValidator {message_alphabet, this}); + ui->tx4->setValidator (new QRegularExpressionValidator {message_alphabet, this}); + ui->tx5->setValidator (new QRegularExpressionValidator {message_alphabet, this}); + ui->tx6->setValidator (new QRegularExpressionValidator {message_alphabet, this}); + ui->freeTextMsg->setValidator (new QRegularExpressionValidator {message_alphabet, this}); + ui->nextFreeTextMsg->setValidator (new QRegularExpressionValidator {message_alphabet, this}); + //ui->extFreeTextMsg->setValidator (new QRegularExpressionValidator {message_alphabet, this}); // Free text macros model to widget hook up. //ui->tx5->setModel (m_config.macros ()); @@ -810,10 +809,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, int ndbm=0; if(dbm<0) ndbm=int(dbm-0.5); if(dbm>=0) ndbm=int(dbm+0.5); - QString t; - t.sprintf("%d dBm ",ndbm); - t+=t1[i]; - ui->TxPowerComboBox->addItem(t); + ui->TxPowerComboBox->addItem(QString("%1 dBm %2").arg(ndbm).arg(t1[i])); } ui->labAz->setStyleSheet("border: 0px;"); @@ -1366,7 +1362,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, inbox.set(pair.first, msg); } - qStableSort(msgs.begin(), msgs.end(), [](QPair const &a, QPair const &b){ + std::stable_sort(msgs.begin(), msgs.end(), [](QPair const &a, QPair const &b){ return a.second.params().value("UTC") > b.second.params().value("UTC"); }); @@ -2109,7 +2105,7 @@ void MainWindow::tryBandHop(){ auto stations = m_config.stations()->station_list(); // order stations by (switch_at, switch_until) time tuple - qStableSort(stations.begin(), stations.end(), [](StationList::Station const &a, StationList::Station const &b){ + std::stable_sort(stations.begin(), stations.end(), [](StationList::Station const &a, StationList::Station const &b){ return (a.switch_at_ < b.switch_at_) || (a.switch_at_ == b.switch_at_ && a.switch_until_ < b.switch_until_); }); @@ -4971,7 +4967,7 @@ void MainWindow::processDecodedLine(QByteArray t){ static qint32 syncStart = -1; if(t.indexOf(" sync start") >= 0){ - auto segs = QString(t.trimmed()).split(QRegExp("[\\s\\t]+"), QString::SkipEmptyParts); + auto segs = QString(t.trimmed()).split(QRegularExpression("[\\s\\t]+"), Qt::SkipEmptyParts); if(segs.isEmpty()){ return; } @@ -4982,7 +4978,7 @@ void MainWindow::processDecodedLine(QByteArray t){ } if(t.indexOf("") >= 0) { - auto segs = QString(t.trimmed()).split(QRegExp("[\\s\\t]+"), QString::SkipEmptyParts); + auto segs = QString(t.trimmed()).split(QRegularExpression("[\\s\\t]+"), Qt::SkipEmptyParts); if(segs.isEmpty()){ return; } @@ -6045,7 +6041,7 @@ void MainWindow::guiUpdate() auto t2 = DriftingDateTime::currentDateTimeUtc ().toString ("hhmm"); icw[0] = 0; - auto msg_parts = m_currentMessage.split (' ', QString::SkipEmptyParts); + auto msg_parts = m_currentMessage.split (' ', Qt::SkipEmptyParts); if (msg_parts.size () > 2) { // clean up short code forms msg_parts[0].remove (QChar {'<'}); @@ -6054,7 +6050,7 @@ void MainWindow::guiUpdate() auto is_73 = m_QSOProgress >= ROGER_REPORT && message_is_73 (m_currentMessageType, msg_parts); m_sentFirst73 = is_73 - && !message_is_73 (m_lastMessageType, m_lastMessageSent.split (' ', QString::SkipEmptyParts)); + && !message_is_73 (m_lastMessageType, m_lastMessageSent.split (' ', Qt::SkipEmptyParts)); if (m_sentFirst73) { m_qsoStop=t2; if(m_config.id_after_73 ()) { @@ -6703,7 +6699,7 @@ void MainWindow::on_addButton_clicked() //Add button } if(f1.size()==0) { QTextStream out(&f1); - out << "ZZZZZZ" << endl; + out << "ZZZZZZ" << Qt::endl; f1.close(); f1.open(QIODevice::ReadOnly | QIODevice::Text); } @@ -6917,8 +6913,8 @@ void MainWindow::createGroupCallsignTableRows(QTableWidget *table, QString const } } - auto groups = m_config.my_groups().toList(); - qSort(groups); + auto groups = m_config.my_groups().values(); + std::sort(groups.begin(), groups.end()); foreach(auto group, groups){ table->insertRow(table->rowCount()); @@ -7520,14 +7516,14 @@ int MainWindow::findFreeFreqOffset(int fmin, int fmax, int bw){ int f = fmin; for(int i = 0; i < nslots; i++){ - f = fmin + bw * (qrand() % nslots); + f = fmin + bw * (QRandomGenerator::global()->generate() % nslots); if(isFreqOffsetFree(f, bw)){ return f; } } for(int i = 0; i < nslots; i++){ - f = fmin + (qrand() % (fmax-fmin)); + f = fmin + (QRandomGenerator::global()->generate() % (fmax-fmin)); if(isFreqOffsetFree(f, bw)){ return f; } @@ -7559,7 +7555,7 @@ void MainWindow::scheduleHeartbeat(bool first){ timestamp = timestamp.addSecs(delta); // 25% of the time, switch intervals - float prob = (float) qrand() / (RAND_MAX); + float prob = (float) QRandomGenerator::global()->generate() / (RAND_MAX); if(prob < 0.25){ timestamp = timestamp.addSecs(15); } @@ -8537,7 +8533,7 @@ void MainWindow::buildFrequencyMenu(QMenu *menu){ menu->addSeparator(); auto frequencies = m_config.frequencies()->frequency_list(); - qSort(frequencies.begin(), frequencies.end(), [](FrequencyList_v2::Item &a, FrequencyList_v2::Item &b) { + std::sort(frequencies.begin(), frequencies.end(), [](FrequencyList_v2::Item &a, FrequencyList_v2::Item &b) { return a.frequency_ < b.frequency_; }); @@ -10613,7 +10609,7 @@ void MainWindow::updateTextWordCheckerDisplay(){ void MainWindow::updateTextStatsDisplay(QString text, int count){ const double fpm = 60.0/m_TRperiod; if(count > 0){ - auto words = text.split(" ", QString::SkipEmptyParts).length(); + auto words = text.split(" ", Qt::SkipEmptyParts).length(); auto wpm = QString::number(words/(count/fpm), 'f', 1); auto cpm = QString::number(text.length()/(count/fpm), 'f', 1); wpm_label.setText(QString("%1wpm / %2cpm").arg(wpm).arg(cpm)); @@ -10701,7 +10697,7 @@ QString MainWindow::callsignSelected(bool useInputText){ } auto keys = m_callActivity.keys(); - qStableSort(keys.begin(), keys.end(), [this](QString const &a, QString const &b){ + std::stable_sort(keys.begin(), keys.end(), [this](QString const &a, QString const &b){ auto tA = m_callActivity[a].utcTimestamp; auto tB = m_callActivity[b].utcTimestamp; if(tA == tB){ @@ -11571,7 +11567,7 @@ void MainWindow::processCommandActivity() { int i = 0; int maxStations = 4; auto calls = m_callActivity.keys(); - qStableSort(calls.begin(), calls.end(), [this](QString + std::stable_sort(calls.begin(), calls.end(), [this](QString const & a, QString const & b) { auto left = m_callActivity[a]; @@ -12091,7 +12087,7 @@ void MainWindow::refreshInboxCounts(){ cd.offset = offset; cd.tdrift = tdrift; cd.utcTimestamp = QDateTime::fromString(utc, "yyyy-MM-dd hh:mm:ss"); - cd.utcTimestamp.setUtcOffset(0); + cd.utcTimestamp.setOffsetFromUtc(0); cd.ackTimestamp = cd.utcTimestamp; cd.submode = submode; logCallActivity(cd, false); @@ -12423,14 +12419,14 @@ void MainWindow::displayBandActivity() { }; // compare offset - qStableSort(keys.begin(), keys.end()); + std::stable_sort(keys.begin(), keys.end()); if(sortBy == "timestamp"){ - qStableSort(keys.begin(), keys.end(), compareTimestamp); + std::stable_sort(keys.begin(), keys.end(), compareTimestamp); } else if(sortBy == "snr"){ - qStableSort(keys.begin(), keys.end(), compareSNR); + std::stable_sort(keys.begin(), keys.end(), compareSNR); } else if(sortBy == "submode"){ - qStableSort(keys.begin(), keys.end(), compareSubmode); + std::stable_sort(keys.begin(), keys.end(), compareSubmode); } if(reverse){ @@ -12585,7 +12581,8 @@ void MainWindow::displayBandActivity() { } if(!text.isEmpty()){ - auto words = QSet::fromList(joined.replace(":", " ").replace(">"," ").split(" ")); + QStringList list = joined.replace(":", " ").replace(">"," ").split(" "); + QSet words(list.begin(), list.end()); if(words.contains("CQ")){ for(int i = 0; i < ui->tableWidgetRXAll->columnCount(); i++){ @@ -12752,20 +12749,20 @@ void MainWindow::displayCallActivity() { // compare callsign - qStableSort(keys.begin(), keys.end()); + std::stable_sort(keys.begin(), keys.end()); if(sortBy == "offset"){ - qStableSort(keys.begin(), keys.end(), compareOffset); + std::stable_sort(keys.begin(), keys.end(), compareOffset); } else if(sortBy == "distance"){ - qStableSort(keys.begin(), keys.end(), compareDistance); + std::stable_sort(keys.begin(), keys.end(), compareDistance); } else if(sortBy == "timestamp"){ - qStableSort(keys.begin(), keys.end(), compareTimestamp); + std::stable_sort(keys.begin(), keys.end(), compareTimestamp); } else if(sortBy == "ackTimestamp"){ - qStableSort(keys.begin(), keys.end(), compareAckTimestamp); + std::stable_sort(keys.begin(), keys.end(), compareAckTimestamp); } else if(sortBy == "snr"){ - qStableSort(keys.begin(), keys.end(), compareSNR); + std::stable_sort(keys.begin(), keys.end(), compareSNR); } else if(sortBy == "submode"){ - qStableSort(keys.begin(), keys.end(), compareSubmode); + std::stable_sort(keys.begin(), keys.end(), compareSubmode); } if(reverse){ @@ -12773,7 +12770,7 @@ void MainWindow::displayCallActivity() { } // pin messages to the top - qStableSort(keys.begin(), keys.end(), [this](const QString left, QString right){ + std::stable_sort(keys.begin(), keys.end(), [this](const QString left, QString right){ int leftHas = (int)!(m_rxInboxCountCache.value(left, 0) > 0); int rightHas = (int)!(m_rxInboxCountCache.value(right, 0) > 0); @@ -13340,7 +13337,7 @@ void MainWindow::networkMessage(Message const &message) foreach(auto pair, inbox.values("UNREAD", "$.params.FROM", selectedCall, 0, 1000)){ msgs.append(pair); } - qStableSort(msgs.begin(), msgs.end(), [](QPair const &a, QPair const &b){ + std::stable_sort(msgs.begin(), msgs.end(), [](QPair const &a, QPair const &b){ return a.second.params().value("UTC") > b.second.params().value("UTC"); }); @@ -13495,8 +13492,7 @@ QString MainWindow::WSPR_hhmm(int n) { QDateTime t=DriftingDateTime::currentDateTimeUtc().addSecs(n); int m=t.toString("hhmm").toInt()/2; - QString t1; - t1.sprintf("%04d",2*m); + QString t1 = QString("%1").arg(2*m, 4, 10, QChar('0')); return t1; } @@ -13505,19 +13501,17 @@ void MainWindow::WSPR_history(Frequency dialFreq, int ndecodes) QDateTime t=DriftingDateTime::currentDateTimeUtc().addSecs(-60); QString t1=t.toString("yyMMdd"); QString t2=WSPR_hhmm(-60); - QString t3; - t3.sprintf("%13.6f",0.000001*dialFreq); + QString t3=QString("%1").arg(0.000001*dialFreq, 13, 'f', 6); if(ndecodes<0) { t1=t1 + " " + t2 + t3 + " T"; } else { - QString t4; - t4.sprintf("%4d",ndecodes); + QString t4 = QString("%1").arg(ndecodes, 4); t1=t1 + " " + t2 + t3 + " R" + t4; } QFile f {m_config.writeable_data_dir ().absoluteFilePath ("WSPR_history.txt")}; if (f.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append)) { QTextStream out(&f); - out << t1 << endl; + out << t1 << Qt::endl; f.close(); } else { MessageBox::warning_message (this, tr ("File Error") @@ -13800,7 +13794,7 @@ void MainWindow::write_frequency_entry (QString const& file_name){ QTextStream out(&f2); out << DriftingDateTime::currentDateTimeUtc().toString("yyyy-MM-dd hh:mm:ss") << " " << qSetRealNumberPrecision (12) << (m_freqNominal / 1.e6) << " MHz " - << "JS8" << endl; + << "JS8" << Qt::endl; f2.close(); } else { auto const& message = tr ("Cannot open \"%1\" for append: %2") @@ -13831,7 +13825,7 @@ void MainWindow::write_transmit_entry (QString const& file_name) out << time.toString("yyyy-MM-dd hh:mm:ss") << " Transmitting " << qSetRealNumberPrecision (12) << (m_freqNominal / 1.e6) << " MHz " << "JS8" - << ": " << dt.message() << endl; + << ": " << dt.message() << Qt::endl; f.close(); } else @@ -13862,11 +13856,11 @@ void MainWindow::writeAllTxt(QString message, int bits) if(m_RxLog==1) { out << DriftingDateTime::currentDateTimeUtc().toString("yyyy-MM-dd hh:mm:ss") << " " << qSetRealNumberPrecision (12) << (m_freqNominal / 1.e6) << " MHz " - << "JS8" << endl; + << "JS8" << Qt::endl; m_RxLog=0; } auto dt = DecodedText(message, bits, m_nSubMode); - out << dt.message() << endl; + out << dt.message() << Qt::endl; f.close(); } else { MessageBox::warning_message (this, tr ("File Open Error") @@ -13894,7 +13888,7 @@ void MainWindow::writeMsgTxt(QString message, int snr) message }; - out << output.join("\t") << endl; + out << output.join("\t") << Qt::endl; f.close(); } else { diff --git a/messageaveraging.cpp b/messageaveraging.cpp index 052de727..9fec463f 100644 --- a/messageaveraging.cpp +++ b/messageaveraging.cpp @@ -97,30 +97,22 @@ void MessageAveraging::foxLogSetup() void MessageAveraging::foxLabCallers(int n) { - QString t; - t.sprintf("Callers: %3d",n); - ui->lab1->setText(t); + ui->lab1->setText(QString("Callers: %1").arg(n, 3)); } void MessageAveraging::foxLabQueued(int n) { - QString t; - t.sprintf("In progress: %3d",n); - ui->lab2->setText(t); + ui->lab2->setText(QString("In progress: %1").arg(n, 3)); } void MessageAveraging::foxLabRate(int n) { - QString t; - t.sprintf("Rate: %3d",n); - ui->lab4->setText(t); + ui->lab4->setText(QString("Rate: %1").arg(n, 3)); } void MessageAveraging::foxAddLog(QString logLine) { ui->msgAvgPlainTextEdit->appendPlainText(logLine); m_nLogged_++; - QString t; - t.sprintf("Logged: %d",m_nLogged_); - ui->lab3->setText(t); + ui->lab3->setText(QString("Logged: %1").arg(m_nLogged_)); } diff --git a/psk_reporter.cpp b/psk_reporter.cpp index 5ccbc5aa..d39a7007 100644 --- a/psk_reporter.cpp +++ b/psk_reporter.cpp @@ -6,6 +6,7 @@ #include "psk_reporter.h" #include +#include #include #include "MessageClient.hpp" @@ -44,7 +45,7 @@ PSK_Reporter::PSK_Reporter(MessageClient * message_client, QObject *parent) : "00960004"; // Report time - m_randomId_h = QString("%1").arg(qrand(),8,16,QChar('0')); + m_randomId_h = QString("%1").arg(QRandomGenerator::global()->generate(),8,16,QChar('0')); QHostInfo::lookupHost("report.pskreporter.info", this, SLOT(dnsLookupResult(QHostInfo))); @@ -79,7 +80,7 @@ void PSK_Reporter::sendReport() // Header QString header_h = m_header_h; - header_h.replace("tttttttt", QString("%1").arg(DriftingDateTime::currentDateTime().toTime_t(),8,16,QChar('0'))); + header_h.replace("tttttttt", QString("%1").arg(DriftingDateTime::currentDateTime().toSecsSinceEpoch(),8,16,QChar('0'))); header_h.replace("ssssssss", QString("%1").arg(++m_sequenceNumber,8,16,QChar('0'))); header_h.replace("iiiiiiii", m_randomId_h); diff --git a/qpriorityqueue.h b/qpriorityqueue.h index 87c081ad..58e3948f 100644 --- a/qpriorityqueue.h +++ b/qpriorityqueue.h @@ -55,7 +55,7 @@ template class QList; #include #else /* Fallback class used when stl is not available */ -template > +template > class QPriorityQueuePrivate { public: inline QPriorityQueuePrivate(LessThan l) : lessThan(l), d() {} @@ -85,11 +85,11 @@ private: }; #endif -template > +template > class Q_CORE_EXPORT QPriorityQueue { public: - inline QPriorityQueue(LessThan l = qLess < T >()) + inline QPriorityQueue(LessThan l = std::less < T >()) : lessThan(l), d(lessThan) { } inline QPriorityQueue(const QPriorityQueue &q) : lessThan(q.lessThan), d(q.d) { } diff --git a/qt_helpers.hpp b/qt_helpers.hpp index bc3ce74d..6f7dde41 100644 --- a/qt_helpers.hpp +++ b/qt_helpers.hpp @@ -99,7 +99,7 @@ public: static QVariant asQVariant(T * ptr) { - return qVariantFromValue (reinterpret_cast (ptr)); + return QVariant::fromValue(reinterpret_cast (ptr)); } }; diff --git a/signalmeter.cpp b/signalmeter.cpp index 970fe791..f2d19fc3 100644 --- a/signalmeter.cpp +++ b/signalmeter.cpp @@ -35,7 +35,7 @@ public: QSize minimumSizeHint () const override { QFontMetrics font_metrics {font (), nullptr}; - return {tick_length + text_indent + font_metrics.width ("00+"), (font_metrics.height () + line_spacing) * range}; + return {tick_length + text_indent + font_metrics.horizontalAdvance ("00+"), (font_metrics.height () + line_spacing) * range}; } protected: @@ -108,7 +108,5 @@ void SignalMeter::setValue(float value, float valueMax) m_meter->setContentsMargins (0, font_metrics.ascent () / 2, 0, font_metrics.ascent () / 2 + font_metrics.descent ()); m_meter->setValue(int(value)); m_meter->set_sigPeak(valueMax); - QString t; - t.sprintf("%d dB",int(value+0.5)); - m_reading->setText(t); + m_reading->setText(QString("%1 dB").arg(int(value+0.5))); } diff --git a/varicode.cpp b/varicode.cpp index ef581b94..d0a63a84 100644 --- a/varicode.cpp +++ b/varicode.cpp @@ -334,7 +334,7 @@ QMap dbm2mw = { int mwattsToDbm(int mwatts){ int dbm = 0; auto values = dbm2mw.values(); - qSort(values); + std::sort(values.begin(), values.end()); foreach(auto mw, values){ if(mw < mwatts){ continue; } dbm = dbm2mw.key(mw); @@ -392,14 +392,15 @@ QString Varicode::unescape(const QString &text){ QString unescaped(text); #if JS8_USE_ESCAPE_SUB_CHAR static const int size = 5; - QRegExp r("([\\x1A][0-9a-fA-F]{4})"); + QRegularExpression r("([\\x1A][0-9a-fA-F]{4})"); #else static const int size = 6; - QRegExp r("(([uU][+]|\\\\[uU])[0-9a-fA-F]{4})"); + QRegularExpression r("(([uU][+]|\\\\[uU])[0-9a-fA-F]{4})"); #endif int pos = 0; - while ((pos = r.indexIn(unescaped, pos)) != -1) { - unescaped.replace(pos++, size, QChar(r.cap(1).right(4).toUShort(0, 16))); + QRegularExpressionMatch match; + while ((pos = unescaped.indexOf(r, pos, &match)) != -1) { + unescaped.replace(pos++, size, QChar(match.captured(1).right(4).toUShort(0, 16))); } return unescaped; @@ -552,7 +553,7 @@ QList>> Varicode::huffEncode(const QMap const &huff, QVector c } QSet Varicode::huffValidChars(const QMap &huff){ - return QSet::fromList(huff.keys()); + auto const keys = huff.keys(); + return QSet(keys.begin(), + keys.end()); } // convert char* array of 0 bytes and 1 bytes to bool vector @@ -806,7 +809,7 @@ QString Varicode::pack72bits(quint64 value, quint8 rem){ // 21 bits for the data + 1 bit for a flag indicator // giving us a total of 5.5 bits per character quint32 Varicode::packAlphaNumeric22(QString const& value, bool isFlag){ - QString word = QString(value).replace(QRegExp("[^A-Z0-9/ ]"), ""); + QString word = QString(value).replace(QRegularExpression("[^A-Z0-9/ ]"), ""); if(word.length() < 4){ word = word + QString(" ").repeated(4-word.length()); } @@ -857,7 +860,7 @@ QString Varicode::unpackAlphaNumeric22(quint32 packed, bool *isFlag){ // // giving us a total of 4.5-5.55 bits per character quint64 Varicode::packAlphaNumeric50(QString const& value){ - QString word = QString(value).replace(QRegExp("[^A-Z0-9 /@]"), ""); + QString word = QString(value).replace(QRegularExpression("[^A-Z0-9 /@]"), ""); if(word.length() > 3 && word.at(3) != '/'){ word.insert(3, ' '); } @@ -1246,7 +1249,7 @@ bool isValidCompoundCallsign(QStringRef callsign){ return true; } - if(callsign.length() > 2 && QRegularExpression("[0-9][A-Z]|[A-Z][0-9]").match(callsign).hasMatch()){ + if (callsign.length() > 2 && QRegularExpression("[0-9][A-Z]|[A-Z][0-9]").match(callsign).hasMatch()){ return true; } diff --git a/varicode.h b/varicode.h index fdb9f738..e9e8dba1 100644 --- a/varicode.h +++ b/varicode.h @@ -7,7 +7,6 @@ #include #include -#include #include #include #include